数据集预览即使执行出错也返回解析后的内容,便于排查拼写错误

This commit is contained in:
datagear 2021-09-11 13:41:53 +08:00
parent 8a4b77f1f1
commit 7e66f016be
10 changed files with 110 additions and 18 deletions

View File

@ -5,7 +5,6 @@
地图热力图
路径图
下拉框
数据集预览即使执行错误也返回解析后的内容,便于用户检查错误;
修复登录超时后打开页面内对话框未处理超时的BUG
改进表格图表滚动条样式,使其与图表主题匹配;
改进表格轮播性能,解决轮播卡顿问题;
@ -14,6 +13,7 @@
修复CSV数据集属性设置日期格式yyyyMMdd无效的BUG因为值直接被解析成了数值跳过了格式
改进标签卡布局支持flex布局名/值是否横排;
升级ECharts至5.2.0版本;
ok 数据集预览即使执行出错也返回解析后的内容,便于排查拼写错误;
待定:

View File

@ -119,7 +119,7 @@ public abstract class AbstractCsvDataSet extends AbstractResolvableDataSet imple
}
catch (Throwable t)
{
throw new DataSetSourceParseException(t);
throw new DataSetSourceParseException(t, reader.getResolvedTemplate());
}
finally
{

View File

@ -124,7 +124,7 @@ public abstract class AbstractJsonDataSet extends AbstractResolvableDataSet impl
}
catch (Throwable t)
{
throw new DataSetSourceParseException(t);
throw new DataSetSourceParseException(t, reader.getResolvedTemplate());
}
finally
{

View File

@ -19,6 +19,8 @@ public class DataSetSourceParseException extends DataSetException
{
private static final long serialVersionUID = 1L;
private String source = null;
public DataSetSourceParseException()
{
super();
@ -38,4 +40,20 @@ public class DataSetSourceParseException extends DataSetException
{
super(message, cause);
}
public DataSetSourceParseException(Throwable cause, String source)
{
super(cause);
this.source = source;
}
public String getSource()
{
return source;
}
public void setSource(String source)
{
this.source = source;
}
}

View File

@ -335,11 +335,15 @@ public class HttpDataSet extends AbstractResolvableDataSet
protected TemplateResolvedDataSetResult resolveResult(DataSetQuery query, List<DataSetProperty> properties,
boolean resolveProperties) throws DataSetException
{
String uri = null;
String headerContent = null;
String requestContent = null;
try
{
String uri = resolveTemplateUri(query);
String headerContent = resolveTemplateHeaderContent(query);
String requestContent = resolveTemplateRequestContent(query);
uri = resolveTemplateUri(query);
headerContent = resolveTemplateHeaderContent(query);
requestContent = resolveTemplateRequestContent(query);
ClassicHttpRequest request = createHttpRequest(uri);
@ -353,13 +357,8 @@ public class HttpDataSet extends AbstractResolvableDataSet
ResolvedDataSetResult result = this.httpClient.execute(request, responseHandler);
String templateResult = "URI:" + System.lineSeparator() + uri //
+ System.lineSeparator() + "-----------------------------------------" + System.lineSeparator() //
+ "Request headers:" + System.lineSeparator() + headerContent //
+ System.lineSeparator() + "-----------------------------------------" + System.lineSeparator() //
+ "Request content:" + System.lineSeparator() + requestContent;
return new TemplateResolvedDataSetResult(result.getResult(), result.getProperties(), templateResult);
return new TemplateResolvedDataSetResult(result.getResult(), result.getProperties(),
buildResolvedTemplate(uri, headerContent, requestContent));
}
catch (DataSetException e)
{
@ -367,10 +366,44 @@ public class HttpDataSet extends AbstractResolvableDataSet
}
catch (Throwable t)
{
throw new DataSetSourceParseException(t);
throw new DataSetSourceParseException(t, buildResolvedTemplate(uri, headerContent, requestContent));
}
}
protected String buildResolvedTemplate(String uri, String headerContent, String requestContent)
{
StringBuilder sb = new StringBuilder();
if (!StringUtil.isEmpty(uri))
{
if (sb.length() > 0)
sb.append(
System.lineSeparator() + "-----------------------------------------" + System.lineSeparator());
sb.append("URI:" + System.lineSeparator() + uri);
}
if (!StringUtil.isEmpty(headerContent))
{
if (sb.length() > 0)
sb.append(
System.lineSeparator() + "-----------------------------------------" + System.lineSeparator());
sb.append("Request headers:" + System.lineSeparator() + headerContent);
}
if (!StringUtil.isEmpty(requestContent))
{
if (sb.length() > 0)
sb.append(
System.lineSeparator() + "-----------------------------------------" + System.lineSeparator());
sb.append("Request content:" + System.lineSeparator() + requestContent);
}
return sb.toString();
}
protected void setHttpHeaders(ClassicHttpRequest request, String headerContent) throws Throwable
{
if (StringUtil.isEmpty(headerContent))

View File

@ -446,7 +446,7 @@ public class ControllerAdvice extends AbstractController
DataSetSourceParseException exception)
{
setOperationMessageForThrowable(request, buildMessageCode(DataSetSourceParseException.class), exception, false,
exception.getMessage());
exception.getMessage(), exception.getSource());
return getErrorView(request, response);
}
@ -457,7 +457,7 @@ public class ControllerAdvice extends AbstractController
HttpServletResponse response, SqlDataSetSqlExecutionException exception)
{
setOperationMessageForThrowable(request, buildMessageCode(SqlDataSetSqlExecutionException.class), exception,
false, exception.getMessage());
false, exception.getMessage(), exception.getSql());
return getErrorView(request, response);
}

View File

@ -2610,6 +2610,7 @@ table.dataTable tbody tr td select{
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
resize: none;
}
.page-form-dataSet .workspace .workspace-operation-wrapper .preview-result-table-wrapper .result-data-max-count{
float: left;
@ -2625,6 +2626,23 @@ table.dataTable tbody tr td select{
width: 100%;
font-size: 0.8em;
}
.page-form-dataSet .workspace .workspace-operation-wrapper .preview-result-table-wrapper .preview-error-info{
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
display: none;
}
.page-form-dataSet .workspace .workspace-operation-wrapper .preview-result-table-wrapper .preview-error-info textarea{
width: 100%;
height: 100%;
margin: 0 0;
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
resize: none;
}
.page-form-dataSet .workspace .workspace-operation-wrapper .input-in-table{
width: 90%!important;
}

View File

@ -264,6 +264,11 @@ readonly 是否只读操作允许为null
if(!this.data.dataSet.uri)
return false;
};
po.previewOptions.error = function(operationMessage)
{
if(operationMessage && operationMessage.data)
return operationMessage.data[1];
};
po.initPreviewOperations();

View File

@ -37,6 +37,9 @@ DataSetEntity dataSet 允许为null
<input type="text" class="resultFetchSizeInput ui-widget ui-widget-content ui-corner-all" />
</div>
</div>
<div class="preview-error-info ui-state-error">
<textarea class="ui-widget ui-widget-content"></textarea>
</div>
</div>
<div id="${pageId}-dataSetParams" class="params-table-wrapper minor-dataTable">
<div class="operation">

View File

@ -690,7 +690,13 @@ po.previewOptions.url = "...";
return po.buildDataSetPropertiesColumns(previewResponse.properties);
},
//预览请求成功回调函数
success: function(previewResponse){}
success: function(previewResponse){},
//预览出错回调函数,返回非空字符串表明将其显示在错误信息区内
error: function(operationMessage, jqXHR)
{
if(operationMessage && operationMessage.data)
return operationMessage.data[1];
}
};
po.resultFetchSizeVal = function(val)
@ -845,6 +851,7 @@ po.previewOptions.url = "...";
$(this).button("disable");
});
po.element(".preview-error-info").hide();
po.element(".preview-result-foot").hide();
var table = po.previewResultTableElement();
@ -928,9 +935,17 @@ po.previewOptions.url = "...";
po.previewOptions.success(previewResponse);
},
error: function()
error: function(jqXHR)
{
po.previewSuccess(false);
var errorInfo = po.previewOptions.error(jqXHR.responseJSON, jqXHR);
if(errorInfo)
{
po.element(".preview-error-info textarea").val(errorInfo);
po.element(".preview-error-info").show();
}
},
complete: function()
{