Здравствуйте.
У меня два вопроса.
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;
Почему? Как это исправить?
Нравится
Здравствуйте.
Хороший пример реализации хранения данных в профиле можно посмотреть в скрипте wnd_PlanningViewPeriodTreeScript в функциях SavePeriodTreeToProfile() и LoadPeriodTreeFromProfile().
Спасибо, Дмитрий, но у меня, к сожалению, такого скрипта нету. Версия софта - 3.2.0.87
Здравствуйте.
Скопирую сюда:
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); }
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; }
Спасибо ещё раз. Посмотрел. Не всё, конечно, понятно, но разобрался с тем, что хотел :)