private void init(BuildSession session, ViewContext view_context) throws Exception { CompositeMap context = ServiceThreadLocal.getCurrentThreadContext(); if (context == null) throw new IllegalStateException("No service context set in ThreadLocal yet"); CompositeMap view = view_context.getView(); CompositeMap base_model = view_context.getModel(); HTMLIncludeConfig hic = HTMLIncludeConfig.getInstance(view); String path = TextParser.parse(hic.getPath(), base_model); version = TextParser.parse(hic.getVersion(), base_model); if (null != path && !path.isEmpty()) { int begin = path.indexOf("/release"); if (begin < 0) return; path = path.substring(begin, path.length()); articlePath = "../.." + path; sourcePath = session.getContextPath() + path.replaceAll("\\\\", "/").replaceAll("(.*/)[^/]*$", "$1"); return; } String pathField = hic.getPathField(); String model = hic.getModel(); CompositeMap params = hic.getParams(); Map map = new HashMap(); if (null != params) { Iterator pit = params.getChildIterator(); while (pit.hasNext()) { CompositeMap param = (CompositeMap) pit.next(); map.put( param.get("name"), TextParser.parse((String) param.get("value"), view_context.getModel())); } } BusinessModelService service = factory.getModelService(model, context); CompositeMap resultMap = service.queryAsMap(map); if (null == resultMap || null == resultMap.getChilds()) { throw new ClassNotFoundException("文章未找到,输入的路径不正确。"); } Iterator it = resultMap.getChildIterator(); while (it.hasNext()) { path = ((CompositeMap) it.next()).getString(pathField); if (null != path) { articlePath = "../.." + path; sourcePath = session.getContextPath() + path.replaceAll("\\\\", "/").replaceAll("(.*/)[^/]*$", "$1"); break; } } }
@Override public void onPrepareBusinessModel(BusinessModel model, CompositeMap context) throws Exception { boolean customization_enabled = model.getCustomizationenabled(); if (customization_enabled) { /* This context may be "<model-service-context BusinessModel="aurora.bm.BusinessModel@e73b917"/>", * so need ServiceThreadLocal.getCurrentThreadContext(); */ CompositeMap fullContext = ServiceThreadLocal.getCurrentThreadContext(); if (fullContext == null) return; LoggingContext.getLogger(fullContext, this.getClass().getCanonicalName()) .log(Level.CONFIG, fullContext.getRoot().toXML()); // String function_id = TextParser.parse(FUNCTION_ID_PATH, fullContext); String function_code = TextParser.parse(FUNCTION_CODE_PATH, fullContext); // if not called by a Screen. if (function_code == null || "".equals(function_code)) { return; } CompositeMap custDetailRecords = getCustomizationData(model, function_code, fullContext); if (custDetailRecords != null) { LovBMCustomSourceCode.custom(model, custDetailRecords, objectRegistry); } } }
public void run(ProcedureRunner runner) throws Exception { CompositeMap context = runner.getContext(); logger = LoggingContext.getLogger(context, LOGGING_TOPIC); logger.config("jco-invoke"); logger.config("==================================="); logger.log(Level.CONFIG, "config:{0}", new Object[] {this}); ServiceInstance service = (ServiceInstance) ServiceInstance.getInstance(context.getRoot()); // HttpServiceInstance service = (HttpServiceInstance) HttpServiceInstance // .getInstance(context.getRoot()); CompositeMap target = null; CompositeMap model = null; if (service != null) model = service.getServiceContext().getModel(); else model = context.getRoot().getChild("model"); if (model == null) model = context.getRoot().createChild("model"); if (return_target != null) { String t = TextParser.parse(return_target, context); target = (CompositeMap) model.getObject(t); if (target == null) target = model.createChildByTag(t); } JCoDestination destination = sapConfig.getJCoDestination(sid); String functionName = function; JCoFunctionTemplate ftemplate = destination.getRepository().getFunctionTemplate(functionName); logger.info("function template:" + functionName); if (ftemplate == null) { logger.log(Level.SEVERE, "Function '" + function + "' not found in SAP system."); throw new IllegalArgumentException("Function '" + function + "' not found in SAP system."); } // Create a function from the template JCoFunction function = ftemplate.getFunction(); JCoParameterList input = function.getImportParameterList(); JCoParameterList output = function.getExportParameterList(); if (parameters != null) for (int i = 0; i < parameters.length; i++) { Parameter param = parameters[i]; if (param.Return_field == null) { Object o = param.Source_field == null ? param.Value : context.getObject(param.Source_field); String value = o == null ? "" : o.toString(); input.setValue(param.Name, value); logger.log(Level.CONFIG, "parameter {0} -> {1}", new Object[] {param.Name, value}); } } if (structures != null) { for (int i = 0; i < structures.length; i++) { Structure structure = structures[i]; structure.setLogger(logger); if (structure.isImport()) { JCoStructure stc = structure.getJCOStructure(input); structure.fillJCOStructure(stc, context); input.setValue(structure.Name, stc); } } } // Set import table if (tables != null) { JCoParameterList list = function.getTableParameterList(); for (int i = 0; i < tables.length; i++) { Table table = tables[i]; table.setLogger(logger); if (table.isImport()) { JCoTable tbl = table.getJCOTable(list); Object o = context.getObject(table.Source_field); logger.config( "transfer import table " + table.Name + " from '" + table.Source_field + "':" + o); if (o instanceof CompositeMap) table.fillJCOTable(tbl, (CompositeMap) context); } } } // Call the remote system and retrieve return value logger.config("call function " + function); function.execute(destination); if (parameters != null) { for (int i = 0; i < parameters.length; i++) { Parameter param = parameters[i]; if (param.Return_field != null) { if (target == null) throw new ConfigurationError( "<jco-invoke>:must set 'return_target' attribute if there is return field"); String vl = output.getString(param.Name); if (vl == null && !param.Nullable) throw new IllegalArgumentException( "jco-invoke: return field " + param.Name + " is null"); String f = TextParser.parse(param.Return_field, context); target.putObject(f, vl); logger.config("return: " + param.Name + "=" + vl + " -> " + f); } } } if (structures != null) { for (int i = 0; i < structures.length; i++) { Structure structure = structures[i]; structure.setLogger(logger); if (structure.isImport()) continue; if (structure.Target == null) throw new ConfigurationError( "Must set 'target' attribute for Structures " + structure.Name); JCoStructure stc = structure.getJCOStructure(output); CompositeMap result = (CompositeMap) context.getObject(structure.Target); if (result == null) result = context.createChildByTag(structure.Target); structure.fillCompositeMap(stc, result); } } // Get export tables if (tables != null) { JCoParameterList list = function.getTableParameterList(); if (list == null) throw new IllegalArgumentException("Function '" + function + "' doesn't return tables"); for (int i = 0; i < tables.length; i++) { Table table = tables[i]; if (table.isImport()) continue; if (table.Target == null) throw new ConfigurationError("Must set 'target' attribute for table " + table.Name); table.setLogger(logger); JCoTable records = table.getJCOTable(list); // Fetch as CompositeMap CompositeMap result = (CompositeMap) context.getObject(table.Target); if (result == null) result = context.createChildByTag(table.Target); table.fillCompositeMap(records, result); int rc = 0; if (result.getChilds() != null) rc = result.getChilds().size(); logger.config( "loading export table " + table.Name + " into path '" + table.Target + "', total " + rc + " record(s)"); } } }
public void query(CompositeMap context_map) throws Exception { super.doPopulate(); ILogger logger = LoggingContext.getLogger(context_map, DatabaseConstant.AURORA_DATABASE_LOGGING_TOPIC); SqlServiceContext context = (SqlServiceContext) DynamicObject.cast(context_map, SqlServiceContext.class); String cache_key = null; boolean is_cache = false; ICache cache_for_data = null; if (cacheKey != null) { is_cache = true; cache_for_data = CacheUtil.getNamedCache(mObjectReg, KEY_DATA_CACHE_NAME); cache_key = TextParser.parse(cacheKey, context_map); CompositeMap data = (CompositeMap) cache_for_data.getValue(cache_key); if (data != null) { logger.config("Cached data found with key " + cache_key); // write cache to context CompositeMap root_node = getMapFromRootPath( context.getModel(), TextParser.parse(this.rootPath, context.getObjectContext())); root_node.copy(data); return; } else { logger.config( "Cached data not found with key " + cache_key + ", doing normal database query"); } } prepare(context_map); // context.setTrace(trace); ServiceOption option = ServiceOption.createInstance(); option.setQueryMode(mode); option.setAutoCount(autoCount); option.setConnectionName(connectionName); option.setFieldCase(fieldNameCaseValue); option.setRecordName(recordName); transferServiceOption(option, ServiceOption.KEY_DEFAULT_WHERE_CLAUSE); transferServiceOption(option, ServiceOption.KEY_QUERY_ORDER_BY); context.setServiceOption(option); IResultSetConsumer consumer = null; // CompositeMapCreator compositeCreator = null; try { // get parameter CompositeMap param = context.getCurrentParameter(); if (parameter != null) { Object obj = param.getObject(parameter); if (obj != null) { if (!(obj instanceof CompositeMap)) throw new IllegalArgumentException( "query parameter should be instance of CompositeMap, but actually got " + obj.getClass().getName()); param = (CompositeMap) obj; } } // page settings FetchDescriptor desc = FetchDescriptor.createFromParameter(context.getParameter()); desc.setFetchAll(fetchAll); if (pageSize != null) desc.setPageSize(pageSize.intValue()); // ResultSet consumer if (this.rsConsummer != null) consumer = this.rsConsummer; else { consumer = (IResultSetConsumer) context.getInstanceOfType(IResultSetConsumer.class); if (consumer == null) { consumer = new CompositeMapCreator(); mOCManager.populateObject(mEntryConfig, consumer); } } if (consumer instanceof IContextAcceptable) ((IContextAcceptable) consumer).setContext(context_map); // set root path if (consumer instanceof IRootMapAcceptable) { CompositeMap result = getMapFromRootPath( context.getModel(), TextParser.parse(this.rootPath, context.getObjectContext())); if (result != null) ((IRootMapAcceptable) consumer).setRoot(result); } context.setResultsetConsumer(consumer); doQuery(param, consumer, desc); // write data to cache if (is_cache) { CompositeMap d = (CompositeMap) consumer.getResult(); CompositeMap copied_data = (CompositeMap) d.clone(); copied_data.setParent(null); cache_for_data.setValue(cache_key, copied_data); } /* if( transform_list != null && consumer instanceof IRootMapAcceptable){ CompositeMap root = ((IRootMapAcceptable)consumer).getRoot(); Transformer.doBatchTransform( root, transform_list ); } */ } finally { context.setServiceOption(null); context.setResultsetConsumer(null); cleanUp(context_map); } }