Цитата:
Сообщение от
kashperuk
К примеру если я в XML хочу эти значения запихать, или в какой-то строковой ключ хранимый в БД.
Для БД есть SqlSystem(есть даже в ax3). Он не поддерживает DateTime и вроде даже не боится Little Bobby Tables
X++:
info(new SqlSystem().sqlLiteral(DateTimeUtil::utcNow()));
info(new SqlSystem().sqlLiteral("Robert'); DROP TABLE Students;--"));
info(new SqlSystem().sqlLiteral(-1234.567890123));
выдаст
Цитата:
'1900-01-01T00:00:00'
N'Robert''); DROP TABLE Students;--'
-1.234567890123E3
Цитата:
Сообщение от
dech
Практически любой тип можно преобразовать в строку простой операцией:
X++:
s = strFmt("%1", value);
А вот обратное преобразование... тут все от типа зависит.
Для большинства типов есть трюк с использованием anytype.
anytype хоть и зовётся any, но на самом деле он запоминает тип после первого присвоения. Последующие попытки присвоения запустят штатный механизм преобразований между типами.
str же преобразуется почти во всё, кроме DateTime, к сожалению
X++:
str typeBinding;
anytype any = typeBinding;
transDate transDate = today(), transDateTest;
real realNum = -12345.789012345, realNumTest;
int64 i64 = 12345678901234567, i64Test;
NoYes enum = NoYes::Yes, enumTest;
UtcDateTime dateTime = DateTimeUtil::utcNow(), dateTimeTest;
;
Debug::assert(typeof(any) == Types::String);
any = transDate;
transDateTest = any;
Debug::assert(transDateTest == transDate);
any = realNum;
realNumTest = any;
Debug::assert(realNumTest == realNum);
any = i64;
i64Test = any;
Debug::assert(i64Test == i64);
any = enum;
enumTest = any;
Debug::assert(enumTest == enum);
any = dateTime;
dateTimeTest = any;
info("OK");