...
代码块 | ||||||
---|---|---|---|---|---|---|
| ||||||
importPackage(Packages.smartbi.sdk.service.datasource); importClass(java.lang.System); importPackage(Packages.smartbi.freequery.querydata); importPackage(Packages.smartbi.freequery.repository); importPackage(Packages.smartbi.freequery.basicdata); importClass(java.util.List); importPackage(Packages.smartbi.state); importPackage(Packages.smartbi.fake); importPackage(Packages.smartbi.usermanager); var dataSourceId = "DS.sqlserver2008Copy";//需要修改的数据源ID var tableName = ["student","student_copy"];//需要更新的表名,格式:["表1","表2","表3"...];当"var tableName = []" 时执行全局更新。 var datasrcService = new DataSourceService(connector); var mds = MetaDataServiceImpl.getInstance(); var sql = "SELECT A.name AS table_name,B.name AS column_name,C.value AS column_description FROM sys.tables A INNER JOIN sys.columns B ON B.object_id = A.object_id LEFT JOIN sys.extended_properties C ON C.major_id = B.object_id AND C.minor_id = B.column_id"; if(tableName.length > 0){ var nameStr = ""; //拼接表名字符串,作为sql查询条件。 for (var i = 0; i < tableName.length; i++){ if(i == 0) nameStr = "'"+tableName[i] + "'"; else nameStr += ",'" + tableName[i]+"'"; } sql += " WHERE A.name in (" + nameStr + ")"; } //执行sql var gridDataGroup = datasrcService.executeNoCacheable(dataSourceId, sql); System.out.println("别名个数:"+gridDataGroup.getRowsCount()); var dataSource = mds.getDataSource(dataSourceId); var tables = dataSource.getTables(); //设置会话 var req = new FakeHttpRequest(); StateModule.getInstance().setRequest(req); StateModule.getInstance().setSession(req.getSession()); req.getSession().setAttribute("state", new State()); StateModule.getInstance().setCurrentUser(UserManagerModule.getInstance().getUserByName("admin")); //开始同步字段注释 for (var i = 0; i < gridDataGroup.getRowsCount(); i++) { var hasUpdateOneField = false; //获取查询结果【表名、字段名称、注释】 var tableName = gridDataGroup.get(i, 0).getValue(); var fieldName = gridDataGroup.get(i, 1).getValue(); var fieldAlias = gridDataGroup.get(i, 2).getValue(); if(fieldAlias && !"".equals(fieldAlias)){ for(var j = 0 ; j < tables.size() ; j++){ var table = tables.get(j); if(table.getName().equals(tableName)){ var fields = table.getFields(); for(var k = 0 ; k < fields.size() ; k++){ var field = fields.get(k); if(field.getName().equals(fieldName) && !fieldAlias.equals(field.getAlias())){ field.setAlias(fieldAlias); hasUpdateOneField = true; try{ mds.updateField(field,true);//更新字段 }catch(e){ //数据库中可能存在同名注释,在同名注释后加_fieldName, field.setAlias(fieldAlias+"_"+fieldName); mds.updateField(field,true); //更新字段 } break; } } } if(hasUpdateOneField){ break; } } } } |
...