Hi
in my scenario I have to load some survey with preloaded data. Some of this data are numbers represented as string:
Codesurvey.data = {
arg: 1,
argPlusOne: '2',
};
Even if all expressions are run at survey load the survey data does not change when the calculated value is different only as a type. To me 2 is different than "2" but for surveyjs 2 is "the same as "2". Test here
https://plnkr.co/edit/biZCxJPS3Og0HMqE?preview
The previous plunk just show that the expression is called. But even without the custom function the behavior is the same:
https://plnkr.co/edit/QiKR9qOehTLxGIQ0
I need to sanitize my data saved as string. I changed the survey to save numbers and I expect surveyjs to apply the new expression to the survey data AT LOADING TIME. Could you help please?
thank you
Hello,
Thank you for sharing those demos. Unfortunately, I don't completely follow. I would appreciate it if you elaborate on the expected output.
Thank you
Hi Jane, and sorry if I was not clear
let's focus on https://plnkr.co/edit/biZCxJPS3Og0HMqE?preview.
Basically, I would like that when the survey loads it would change the survey data from:
{ "arg": 1, "argPlusOne": "2" }
to
{ "arg": 1, "argPlusOne": 2 }
without any user interaction. Why? Because my custom function in the expression returns
2
and not"2"
.Instead if I click complete the result is still
{ "arg": 1, "argPlusOne": "2" }
SurveyJS does not change the data because it maybe thinks that
2
and"2"
mean the same. From a stricter data point of view, they are very differentI hope is clearer now. Thank you
Hello,
Thank you for the update. You're correct. A form library uses the
Helpers.isTwoValueEquals
function to check if these two values (2
and"2"
) are equal. Specifically, those values are considered equal in the following line of code: https://github.com/surveyjs/survey-library/blob/7f1b3a0ec8bec46b8730cedecfcf673e436b0921/packages/survey-core/src/helpers.ts#L137-L141. Therefore, a survey doesn't assign a custom function calculation result2
to the existing"argPlusOne": "2"
value since these are considered equal.Would you please elaborate on your usage scenario? In particular, why are you assigning a value to your
argPlusOne
field if you want it to be calculated in code? You may wish to remove theargPlusOne
value from thesurvey.data
object instance:survey.data = { arg: 1 };
it's value will be calculated using a custom function.
I look forward to your reply.