|
Сохранить ОбъектXDTO | ☑ | ||
---|---|---|---|---|
0
alexei366
20.01.13
✎
21:52
|
Мне необходимо хранить ОбъектXDTO в базе, вроде всё просто: получаем xml строку ложим её в реквизит типа ХЗ, ну и в обратную сторону получаем объект через ФабрикуXDTO. Проблема следующая, ОбъектXDTO самописный и в нем есть обязательные свойства (обязательные теги я имею ввиду), но надо чтоб можно было сохранять как бы "черновик", который кстати нормально выгружается в строку xml но вот обратно ФабрикаXDTO считает что xml невалидный (что правда) и не создаёт ОбъектXDTO.
Вопрос такой можно ли какимто образом сохранить непосредственно ОбъектXDTO в базе. P.S. единственное что пока придумал создавать в ПакетеXDTO клон объекта , у которого все поля необязательные. |
|||
1
alexei366
20.01.13
✎
21:58
|
АПП
|
|||
2
alexei366
21.01.13
✎
09:35
|
Народ, поднимаю тему (к понедельнику)
|
|||
3
alexei366
21.01.13
✎
12:20
|
Очередной раз поднимаю тему + ещё 1 вопросик : если во врем хранилище формы сохранен ОбъектXDTO, будет ли заметны задержки при серверных вызовах формы, если при каждом из них будет использован метод ПолучитьИзВременногоХранилища() данный объект и представим что в формате xml его размер будет составлять 10 мб
|
|||
4
Serginio1
21.01.13
✎
12:26
|
Посмотри про Версионность в 1С. Там объекты сохраняются через сериализацию XDTO, а вот загружаются через ЧтениеXML
|
|||
5
alexei366
21.01.13
✎
12:27
|
Данный Объект не является Объектом базы (не справочник не документ), так что Сериализатор мне не поможет
|
|||
6
Fragster
гуру
21.01.13
✎
12:37
|
(0) нужно правильный тип при разворачивании обратно (и туда тоже). У тебя же пакет XDTO/WS схема описаны?
|
|||
7
Serginio1
21.01.13
✎
12:38
|
Смотри РазборПредставленияОбъектаXML
(5) А какая разница У тебя есть объектXDTO. Объект XDTO прекрасно сериализуется в текст Фабрика.ЗаписатьXML(ЗаписьXML, Объект);. А вот обратно можно по аналогии с версионностью |
|||
8
alexei366
21.01.13
✎
12:39
|
Но он пока неиспользуется в WS, мож потом. Смысл в том что выгрузить в строку невалидный "черновик" (в плане наличия обязательных полей) объект я могу, а обратно в Объект в строку уже нет.
|
|||
9
Serginio1
21.01.13
✎
12:43
|
(6) У него не все поля заполнены, поэтому при десериализации у него и выпадают. Для того, что бы поля не можно было не сериализовать нужно вроде как установить минимальное количество в 0.
http://www.lockator.com.ua/config1s/integration/77-xdto.html |
|||
10
alexei366
21.01.13
✎
12:44
|
Serginio1 ты попробуй посредством ФабрикиXDTO загрузить какойнить объект, удалив из его xml какой-нибудь обязательный элемент (к примеру наверно Ref-ссылка)
|
|||
11
alexei366
21.01.13
✎
12:45
|
Схема XSD внешняя, не я её придумал, и я уже в начале писал "P.S. единственное что пока придумал создавать в ПакетеXDTO клон объекта , у которого все поля необязательные.". Такчто хочу узнать есть ли другие варианты решения.
|
|||
12
AaNnDdRrEeYy
21.01.13
✎
12:46
|
Собирай черновик сначало в другой тип данных например структуру или тз и сохраняй его хоть в хранилище значений, а когда собереш до конца заполниш XDTO, никак ты файл с помощью XDTO не прочитаешь если он не валидный, только используя чтение xml но это геморно.
|
|||
13
Serginio1
21.01.13
✎
12:47
|
(10) Поэтому читай пост 7 и смотри функцию РазборПредставленияОбъектаXML.
|
|||
14
AaNnDdRrEeYy
21.01.13
✎
12:49
|
(13) XDTO такая штука что она может без проблем записать такую фигню что сама потом прочитать не сможет. Перед записью нужно вызывать метод Проверить() для предотврашения такой ситуаций.
|
|||
15
Serginio1
21.01.13
✎
12:51
|
Посмотри v8: Веб-сервис и передача-прием XML
|
|||
16
alexei366
21.01.13
✎
12:51
|
AaNnDdRrEeYy эт я знаю, думал насчет своего какогото гавна для хранения чернового варианта, но хотел всетаки хранить в xml строке созданной по xsd.
|
|||
17
alexei366
21.01.13
✎
12:52
|
Serginio1 да я это уже и сам делал и использую, мне пока на лево от вопроса не надо.
|
|||
18
Serginio1
21.01.13
✎
12:55
|
(17) А как ты объект в базе сохранишь, кроме как через сериализацию?
|
|||
19
alexei366
21.01.13
✎
12:57
|
Ладно вопрос попроще. Я создаю ОбъектXDTO на остнове типа, и при выгрузке в строку имя корневого элемента устанавливается такое же как имя типа. Как мне правильно создать ОбъектXDTO на основе корневого свойства ПакетаXDTO (или только после создания ОбъектаXDTO сделать КорневойЭлемент.Наименование = "Корневой элемент";)
|
|||
20
alexei366
21.01.13
✎
13:04
|
Serginio1 я храню стоку в ХЗ, а ХЗ в реквизите.
//////////////////// в строку ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.УстановитьСтроку(Кодировка); ЗаписьXML.ЗаписатьОбъявлениеXML(); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОбъектXDTO); СтрокаXML = ЗаписьXML.Закрыть(); ////////////////////////// в объект ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.УстановитьСтроку(СокрЛП(Строка)); ОбъектXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипОбъекта); |
|||
21
Serginio1
21.01.13
✎
13:59
|
(20) Это понятно. Я так понимаю, что Для загрузки в клон, тебе нужно подменить тип объекта в строке.
Можно отдельно создать пакет, полный клон только с необязательными свойствами, и выгрузить схему в файл. И с объектом работать через фабрику с загруженной схемой Фабрика = СоздатьФабрикуXDTO("ПутьКФайлу.xsd"); |
|||
22
alexei366
21.01.13
✎
14:10
|
(21) А вот Фабрика = СоздатьФабрикуXDTO("ПутьКФайлу.xsd"); если каждый раз при получении объекта (или серверном вызове) мне xsd подгружать, то чувствую тормоза наверно будут. Я думал мож другой вариант есть преобразовать невалидный xml в ОбъектXDTO. Наверно придётся запариться и сделать как посоветовал (12) .
|
|||
23
Serginio1
21.01.13
✎
14:36
|
(22) Проще работать со структурой. Она тоже прекрасно сериализуется.
|
|||
24
Serginio1
21.01.13
✎
14:38
|
||||
25
AaNnDdRrEeYy
21.01.13
✎
14:43
|
(22) а я чувствую что первая xsd схема не сможет прочитать файл созданный второй xsd схемой, простанства имен то у них разные
|
|||
26
Serginio1
21.01.13
✎
14:46
|
(25) Почему разные, сделать клон в конфигурации и выгрузить в файл.
|
|||
27
AaNnDdRrEeYy
21.01.13
✎
14:48
|
(26) ну если тока так, то да.
|
|||
28
Serginio1
21.01.13
✎
15:11
|
(0) Структуру можешь создать
Для каждого свойство из ОбъектXDTO.Свойства() Цикл Резулт.Вставить(свойство.ИмяПоля,ОбъектXDTO[Свойство.Имя]); КонецЦикла |
|||
29
alexei366
21.01.13
✎
15:44
|
(28) там не всё так просто. Там у меня получается Структура которая имеет значения типа структура или массив или какойто простой тип, и в свою очередь массив имеет в своих элементах структуру, и т.д.
|
|||
30
alexei366
21.01.13
✎
15:47
|
(26) да на самом деле, можно хоть в том же пакете содать новый тип (черновик), единственное чем будут отличаться xml, так только названием корневого элемента, на что в свою очередь ФабрикеXDTO вообще н а с р а т ь.
|
|||
31
Serginio1
21.01.13
✎
16:41
|
(29) Ну можешь исследовать Свойство.Тип и рекурсивно вызывать для свойств массивов или структур.
|
|||
32
Serginio1
21.01.13
✎
16:42
|
31 + По сути это аналог 15 только не на тексте, а на объекте XDTO
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |