восстановление
десериализация
сериализация
сохранение
Технические вопросы
Разработка

Сериализация/Десериализация.

Здравствуйте.
У меня два вопроса.
1. Где можно посмотреть внятную помощь по вопросу Сериализации/десериализации данных в террасофте? На форуме не нашел. В файле с SDK - только пара слов: "Serialize/deserialize() - метод сохранения/восстановления объекта". А как пользоваться - не описано.

2. Как следствие, у меня возникает ошибка при попытке десериализации:

var XMLStorage = GetNewXMLStorage();
XMLStorage.InitRootNode('FiltersBuilderRootNode');
fbcFilters.FiltersBuilder.RootItems.Serialize(XMLStorage.RootNode);
FilterText = XMLStorage.Text; // тут все нормально

// теперь десериализуем. Пишем всё тоже, что и выше только теперь:
// А вот тут вдруг ни с того ни с сего ошибка "parse Error!":
XMLStorage.Text = FilterText;

Почему? Как это исправить?

Нравится

4 комментария

Здравствуйте.

Хороший пример реализации хранения данных в профиле можно посмотреть в скрипте wnd_PlanningViewPeriodTreeScript в функциях SavePeriodTreeToProfile() и LoadPeriodTreeFromProfile().

Спасибо, Дмитрий, но у меня, к сожалению, такого скрипта нету. Версия софта - 3.2.0.87

Здравствуйте.

Скопирую сюда:

[javascript]
function SavePeriodTreeToProfile() {
if (!PlanningViewPeriodTree.Planning) {
return;
}

var XMLStorage = GetNewXMLStorage();
var Node;
var Today = new Date;
var Data;

XMLStorage.Clear();
XMLStorage.InitRootNode('PeriodTree');
Node = XMLStorage.RootNode;
Node.SetAttributeAsInt('BeginYear', PlanningViewPeriodTree.BeginYear,
Today.getFullYear());
Node.SetAttributeAsInt('EndYear', PlanningViewPeriodTree.EndYear,
Today.getFullYear());
Node.SetAttributeAsStr('Period', PlanningViewPeriodTree.Planning.Period,
'');
Node.SetAttributeAsBool('IsRefreshManually', cbRefreshManually.IsChecked,
false);

Data = DatasetToMime(dlData.Dataset);
Node.SetAttributeAsStr('Dataset', Data, '');

var Key = PlanningViewPeriodTree.Planning.ID;
Key = '_PeriodTree_' + Key.replace(/[{}-]/g, '');
Services.SaveItemProfileStorage(Self.USI, Key, XMLStorage);
}
[/javascript]

[javascript]
function LoadPeriodTreeFromProfile() {
if (!PlanningViewPeriodTree.Planning) {
return false;
}

var XMLStorage;
var Node;
var Today = new Date;
var Data;

var Key = PlanningViewPeriodTree.Planning.ID;
Key = '_PeriodTree_' + Key.replace(/[{}-]/g, '');
XMLStorage = Services.GetItemProfileStorage(Self.USI, Key);
if (!XMLStorage) {
return false;
}
XMLStorage.InitRootNode('PeriodTree');
Node = XMLStorage.RootNode;
PlanningViewPeriodTree.BeginYear = Node.GetAttributeAsInt('BeginYear',
Today.getYear());
PlanningViewPeriodTree.EndYear = Node.GetAttributeAsInt('EndYear',
Today.getYear());
edtFromYear.Value = PlanningViewPeriodTree.BeginYear;
edtToYear.Value = PlanningViewPeriodTree.EndYear;
cbRefreshManually.IsChecked = Node.GetAttributeAsBool('IsRefreshManually',
false);

var Period = Node.GetAttributeAsStr('Period', '');
if (IsEmptyGUID(Period) ||
(Period != PlanningViewPeriodTree.Planning.Period)) {
return false;
}
Data = Node.GetAttributeAsStr('Dataset', '');
if (Data == '') {
return false;
}

var Dataset = dlData.Dataset;
if (!MimeToDataset(Dataset, Data)) {
return false;
}
Dataset.Attributes('Filled') = true;
ExpandTree();
return true;
}

[/javascript]

Спасибо ещё раз. Посмотрел. Не всё, конечно, понятно, но разобрался с тем, что хотел :)

Показать все комментарии