Перейти к содержанию

StorageObject, TypedField и типизированный JSON

Почти всё взаимодействие с сервером происходит через типизированный json. Чтобы сервер мог правильно отрезолвить типы со стороны клиента для структур данных, используется TypedField - вспомогательный объект, который добавляет информацию о типе значения. Многие объекты в системе автоматически добавляют нужные типы при работе со значениями. Например:

const cardRequest = new CardRequest(); cardRequest.requestType = '7a2cb692-7a55-4519-b193-0ce2de435523';

При установке значения свойства requestType добавлять явную информацию о типах не нужно. Объект сам проставит нужный тип при изменении. Но если свойство динамическое и мы не можем заранее узнать тип, то необходимо явно добавить информацию о типе. Например:

const cardRequest = new CardRequest(); cardRequest.info['MyDynamicValue'] = TypedField.createGuid('7a2cb692-7a55-4519-b193-0ce2de435523');

это актуально и для полей секций карточки:

const fields = card.sections.get('MySection').fields; fields.set('MyValue', 10, FieldType.Int); fields.set('MyAnotherValue', TypedField.createBoolean(false)); fields.set('MyNullValue', null);

Для значений null тип указывать не нужно.

При чтении значений из объектов также стоит учитывать, что значения типизированные. Для заранее описанных свойств ничего делать не нужно и можно просто обращаться к свойству:

const requestType = cardRequest.requestType; // '7a2cb692-7a55-4519-b193-0ce2de435523'

Для динамических структур есть специальные вспомогательные объекты (StorageAccessor и StorageHelper):

// StorageAccessor const sa = new StorageAccessor(cardRequest.info); const myDynamicValue = sa.tryGetGuid('MyDynamicValue'); // '7a2cb692-7a55-4519-b193-0ce2de435523' sa.setInt('MyNumber', 100);

// StorageHelper const myNumber = StorageHelper.tryGetValue<FieldType.Int>(cardRequest.info, 'MyNumber');

Для полей секций карточки вспомогательные объекты не требуются:

const fields = card.sections.get('MySection').fields; const myValue = fields.tryGetNumber('MyValue'); // 10 const myAnotherValue = fields.tryGetBoolean('MyAnotherValue'); // false const myNullValue = fields.tryGet('MyNullValue'); // null

Back to top