diff --git a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java index ec1f69d98b..ee7df60151 100644 --- a/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java +++ b/designer-base/src/main/java/com/fr/design/data/DesignTableDataManager.java @@ -3,6 +3,7 @@ package com.fr.design.data; import com.fr.base.FRContext; import com.fr.base.StoreProcedureParameter; import com.fr.base.TableData; +import com.fr.data.AbstractTableDataSource; import com.fr.data.TableDataSource; import com.fr.data.core.DataCoreXmlUtils; import com.fr.data.impl.EmbeddedTableData; @@ -444,7 +445,19 @@ public abstract class DesignTableDataManager { parameter.setValue(parameterMap.get(parameter.getName())); } } - return DataOperator.getInstance().previewTableData(tableDataSource, tabledata, parameterMap, rowCount); + //这边数据集预览不需要把整个模板都发送过去,只需要把模板中的数据集挑出来,传过去就行了。模板一大,预览数据集很变得很慢。 + TableDataSource wrapper = null; + if (tableDataSource != null) { + wrapper = new AbstractTableDataSource(){}; + for (Iterator it = tableDataSource.getTableDataNameIterator(); it != null && it.hasNext(); ) { + String name = it.next(); + TableData tableData = tableDataSource.getTableData(name); + if (tableData != null) { + wrapper.putTableData(name, tableData); + } + } + } + return DataOperator.getInstance().previewTableData(wrapper, tabledata, parameterMap, rowCount); } catch (Exception e) { throw new TableDataException(e.getMessage(), e); } finally { diff --git a/designer-base/src/test/java/com/fr/design/AbstractTableDatasourceTest.java b/designer-base/src/test/java/com/fr/design/AbstractTableDatasourceTest.java new file mode 100644 index 0000000000..e75ec4eb19 --- /dev/null +++ b/designer-base/src/test/java/com/fr/design/AbstractTableDatasourceTest.java @@ -0,0 +1,166 @@ +package com.fr.design; + +import com.fr.base.AbstractTableData; +import com.fr.base.TableData; +import com.fr.cert.token.lang.Assert; +import com.fr.data.AbstractTableDataSource; +import com.fr.data.TableDataSource; +import com.fr.general.data.TableDataException; +import com.fr.script.Calculator; +import com.fr.stable.xml.XMLPrintWriter; +import com.fr.stable.xml.XMLableReader; +import com.fr.third.javax.xml.stream.XMLStreamException; +import junit.framework.TestCase; + +import java.io.ByteArrayOutputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.io.UnsupportedEncodingException; + +public class AbstractTableDatasourceTest extends TestCase { + + public void testAbstractTableDataSourceReadAndWrite() throws XMLStreamException, TableDataException, UnsupportedEncodingException { + String xml = "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "7.nI9\\uimQ~\n" + + "]]>\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "9UT+>AM9kpGY!\\4\\SXO$EO1[i^/XKmIMmdu\n" + + "!\"Q5sC\"9Ji(qlAa_kVTnCC/+p:XVF.KGR?GMsmI)2\">1s>(/T71G7cFsfA\"UpjYr4R)A14-*\n" + + "qc6ri_1*%/XSsf!PM]ARc+ojE:eo:_gma!ut7eZ6BoFc2b5hu4@TUtuOT);aq6l4Vj\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "YfS3J$NPo=IB3AP?eiop.bk9Qu\n" + + "P:F\\.L&t$31~\n" + + "]]>\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "\n" + + "5++,D>0thk;G<`mPXn.b)QZb5j^mQri%8Ji5q\\\n" + + "\n" + + "\n"; + + AbstractTableDataSource source = new AbstractTableDataSource() { + }; + XMLableReader.createXMLableReader(xml).readXMLObject(source); + TableData tableData = source.getTableData("热销产品"); + Assert.notNull(tableData); + Assert.isTrue(tableData.createDataModel(Calculator.createCalculator()).getRowCount() == 4); + Assert.isTrue(tableData.createDataModel(Calculator.createCalculator()).getColumnCount() == 2); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + XMLPrintWriter writer = XMLPrintWriter.create(new OutputStreamWriter(out,"UTF-8")); + source.writeXML(writer); + writer.close(); + TableDataSource another = new AbstractTableDataSource(){}; + XMLableReader.createXMLableReader(new String(out.toByteArray(),"UTF-8")).readXMLObject(another); + tableData = another.getTableData("热销产品"); + Assert.notNull(tableData); + Assert.isTrue(tableData.createDataModel(Calculator.createCalculator()).getRowCount() == 4); + Assert.isTrue(tableData.createDataModel(Calculator.createCalculator()).getColumnCount() == 2); + } +}