Gracefully handle invalid dateTime param values
This commit is contained in:
1 parent
dc5c12c8ce
commit
0d9ca3486b
3 files changed
+12
-8
No files matched your search
+1
-1
@@ -407,7 +407,7 @@ saveDevice = (deviceId, deviceData, isNew, callback) ->
|
|||||||
switch attrName
|
switch attrName
|
||||||
when 'value'
|
when 'value'
|
||||||
if not diff[1] or diff[2].value[1][0] != diff[1].value?[1][0]
|
if not diff[1] or diff[2].value[1][0] != diff[1].value?[1][0]
|
||||||
if diff[2].value[1][1] == 'xsd:dateTime'
|
if diff[2].value[1][1] == 'xsd:dateTime' and Number.isInteger(diff[2].value[1][0])
|
||||||
update['$set'][path.concat('_value').join('.')] = new Date(diff[2].value[1][0])
|
update['$set'][path.concat('_value').join('.')] = new Date(diff[2].value[1][0])
|
||||||
else
|
else
|
||||||
update['$set'][path.concat('_value').join('.')] = diff[2].value[1][0]
|
update['$set'][path.concat('_value').join('.')] = diff[2].value[1][0]
|
||||||
|
|||||||
+7
-6
@@ -49,12 +49,13 @@ function sanitizeParameterValue(parameterValue) {
|
|||||||
break;
|
break;
|
||||||
case 'xsd:dateTime':
|
case 'xsd:dateTime':
|
||||||
if (typeof parameterValue[0] !== 'number') {
|
if (typeof parameterValue[0] !== 'number') {
|
||||||
if (parameterValue[0].getTime() != null)
|
let v = +parameterValue[0];
|
||||||
parameterValue[0] = parameterValue[0].getTime();
|
if (isNaN(v)) {
|
||||||
else if (isNaN(parameterValue[0]))
|
v = Date.parse(parameterValue[0]);
|
||||||
parameterValue[0] = Date.parse(parameterValue[0]);
|
if (isNaN(v))
|
||||||
else
|
v = '' + parameterValue[0];
|
||||||
parameterValue[0] = +parameterValue[0];
|
}
|
||||||
|
parameterValue[0] = v;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
+4
-1
@@ -210,7 +210,10 @@ function SetParameterValues(xml, methodRequest) {
|
|||||||
for (const p of methodRequest.parameterList) {
|
for (const p of methodRequest.parameterList) {
|
||||||
const pvs = paramList.node("ParameterValueStruct");
|
const pvs = paramList.node("ParameterValueStruct");
|
||||||
pvs.node("Name").text(p[0]);
|
pvs.node("Name").text(p[0]);
|
||||||
pvs.node("Value").attr({"xsi:type": p[2]}).text(p[1]);
|
if (p[2] === 'xsd:dateTime' && Number.isInteger(p[1]))
|
||||||
|
pvs.node("Value").attr({"xsi:type": p[2]}).text((new Date(p[1])).toISOString());
|
||||||
|
else
|
||||||
|
pvs.node("Value").attr({"xsi:type": p[2]}).text(p[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
el.node("ParameterKey").text(methodRequest.parameterKey || "");
|
el.node("ParameterKey").text(methodRequest.parameterKey || "");
|
||||||
|
|||||||
Reference in new issue
Block a user