Browse Source

REPORT-140678 公式使用ds.select,对ds替换数据集后公式没有更新

release/11.0
Destiny.Lin 4 days ago
parent
commit
3a37ce9c57
  1. 28
      designer-realize/src/main/java/com/fr/design/actions/replace/action/content/tabledata/TableDataFormulaUtils.java
  2. 4
      designer-realize/src/test/java/com/fr/design/actions/replace/action/content/tabledata/TableDataFormulaUtilsTest.java

28
designer-realize/src/main/java/com/fr/design/actions/replace/action/content/tabledata/TableDataFormulaUtils.java

@ -173,12 +173,18 @@ public class TableDataFormulaUtils {
if (subNode instanceof FunctionCall) {
FunctionCall functionCall = (FunctionCall) subNode;
result.addAll(TableDataFormulaUtils.fetchArgument(functionCall, functionName, argumentIndex));
} else if (subNode instanceof DatasetFunctionCall) {
DatasetFunctionCall datasetFunctionCall = (DatasetFunctionCall) subNode;
result.addAll(TableDataFormulaUtils.fetchArgument(datasetFunctionCall, functionName));
}
}
}
} else if (node instanceof FunctionCall) {
FunctionCall functionCall = (FunctionCall) node;
result.addAll(TableDataFormulaUtils.fetchArgument(functionCall, functionName, argumentIndex));
} else if (node instanceof DatasetFunctionCall) {
DatasetFunctionCall datasetFunctionCall = (DatasetFunctionCall) node;
result.addAll(TableDataFormulaUtils.fetchArgument(datasetFunctionCall, functionName));
}
}
@ -188,6 +194,28 @@ public class TableDataFormulaUtils {
return result;
}
private static List<String> fetchArgument(DatasetFunctionCall datasetFunctionCall, String functionName) {
List<String> result = new ArrayList<>();
Node[] subNodes = datasetFunctionCall.getArguments();
String sourceName = datasetFunctionCall.getSourceName();
if (StringUtils.isNotEmpty(functionName)) {
result.add(sourceName);
}
if (subNodes != null) {
// 遍历子公式
for (Object subNode : subNodes) {
if (subNode instanceof FunctionCall) {
for (TableDataFormulaType tableDataFormulaType : TableDataFormulaType.values()) {
result.addAll(TableDataFormulaUtils.fetchArgument((FunctionCall) subNode, tableDataFormulaType.name(), tableDataFormulaType.getArgumentIndex()));
}
} else if (subNode instanceof DatasetFunctionCall) {
result.addAll(fetchArgument((DatasetFunctionCall) subNode, functionName));
}
}
}
return result;
}
private static void replaceArgument4FunctionCall(FunctionCall functionCall, List<TableReplacementEntity> entities) {
Node[] subNodes = functionCall.getArguments();
if (subNodes != null) {

4
designer-realize/src/test/java/com/fr/design/actions/replace/action/content/tabledata/TableDataFormulaUtilsTest.java

@ -42,6 +42,10 @@ public class TableDataFormulaUtilsTest extends TestCase {
Assert.assertTrue(qiantao2.contains("test-测试7"));
Assert.assertTrue(qiantao2.contains("test-测试8"));
String str3 = "TEST_TABLE.select(INNER.select(glbName,\"6\"),\"6\")";
Set<String> result = TableDataFormulaUtils.search4TableData(str3);
Assert.assertTrue(result.contains("TEST_TABLE"));
Assert.assertTrue(result.contains("INNER"));
}
public void testReplace() {

Loading…
Cancel
Save