|
Ошибка при созданни фабрики XDTO на основе xsd | ☑ | ||
---|---|---|---|---|
0
metanal
09.07.12
✎
11:30
|
Здравствуйте. помогите разобраться. при выполнении кода
[code] Пути = Новый Массив(); Пути.Добавить(ПутьКФайлуСхемы); Фабрика = СоздатьФабрикуXDTO(Пути); [/code] возникает ошибка: {Форма.Форма.Форма(5)}: Ошибка при вызове метода контекста (СоздатьФабрикуXDTO) Фабрика = СоздатьФабрикуXDTO(Пути); по причине: Ошибка проверки модели XDTO: xdto-package-3.3 пакет: http://**/awms Импортируемый пакет типов 'http://**/user-objects' не определен поиск ничего дельного пока не дал... |
|||
1
sapphire
09.07.12
✎
11:31
|
(0) И? Значит не определен тип.
|
|||
2
Skylark
09.07.12
✎
11:32
|
По ходу что-то не нравится в схеме. Попробуй схему импортировать вручную в конфигурацию.
|
|||
3
metanal
09.07.12
✎
11:33
|
в файле xsd. есть строчка с импортом. там тоже какая то ошибка. щас постараюсь текст достать
|
|||
4
metanal
09.07.12
✎
13:13
|
"не удалось разрешить импортируемую схему для пространства имен"
|
|||
5
metanal
09.07.12
✎
13:16
|
содержимое импортируемого файла property.xsd:
<uo:schema xmlns:uo="http://**/awms/user-objects" xmlns="http://**/awms/user-objects" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://**/awms/user-objects" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0.0.1"> <xs:complexType... <uo:complexType... и т.д. содержимое главного файла: <xs:schema targetNamespace="http://**/awms" xmlns:awms="http://**/awms" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:uo="http://**/awms/user-objects" elementFormDefault="qualified" attributeFormDefault="unqualified" version="1.0.0.2"> <xs:import namespace="http://**/awms/user-objects" schemaLocation="property.xsd"/> |
|||
6
sapphire
09.07.12
✎
13:18
|
(5) Вроде как с такими конструкциями xs:import namespace 1С не работает :(
|
|||
7
metanal
09.07.12
✎
13:29
|
а эту ошибку я уже не в 1С прочитал. ее мне visual studio показывает
|
|||
8
metanal
09.07.12
✎
13:34
|
без импорта действительно заработало. но с импортом тоже хотелось бы разобраться
|
|||
9
Саша Питерский
09.07.12
✎
13:45
|
(5) Почему у тебя первая схема описана как uo:schema, а не xs:schema?
|
|||
10
metanal
09.07.12
✎
13:51
|
файл не я писал. я только разбираюсь. но мне тоже было бы интересно услышать ответ на этот вопрос
|
|||
11
Саша Питерский
09.07.12
✎
13:54
|
(10) Лично у меня проблем с конструкцией import не возникало.
Попробуй поменяй uo на xs и посмотри что получится. |
|||
12
metanal
09.07.12
✎
13:57
|
ругается на все типы <uo:
|
|||
13
metanal
09.07.12
✎
13:58
|
"недопустимый дочерний элемент"
|
|||
14
Саша Питерский
09.07.12
✎
14:18
|
(13) Заменяй все на xs
|
|||
15
metanal
09.07.12
✎
17:18
|
теперь возникла другая проблема:
xsd: <xs:element name="warehouses"> <xs:annotation> <xs:documentation>список логических складов</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name="warehouse" maxOccurs="unbounded"> <xs:annotation> <xs:documentation>логический склад</xs:documentation> </xs:annotation> <xs:complexType mixed="true"> <xs:attribute name="wh_name" use="required"> <xs:simpleType> <xs:restriction base="xs:ID"> <xs:maxLength value="30"/> </xs:restriction> </xs:simpleType> </xs:attribute> <xs:attribute name="wh_UID" type="awms:_GUID" use="required"/> </xs:complexType> </xs:element> <xs:element name="defaultWH" type="xs:IDREF" minOccurs="0"> <xs:annotation> <xs:documentation>Склад "по умолчанию", который возвращается, пользователям, не прописанным в security.xml </xs:documentation> </xs:annotation> </xs:element> </xs:sequence> </xs:complexType> файл xml: <warehouses> <warehouse wh_name="WH1" wh_UID="{009e8f41-412c-11dd-8b47-000feaf1b3e0}">Склад AWMS </warehouse> </warehouses> при попытке чтения через сериализатор возникает ошибка: {Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (ПрочитатьXDTO) Сериализатор.ПрочитатьXDTO(КорневойОбъектXDTO.warehouses.warehouse); по причине: Ошибка преобразования данных XDTO: НачалоСвойства: {http://www.w3.org/2001/XMLSchema}anyType Форма: Элемент Тип: {http://www.w3.org/2001/XMLSchema}anyType по причине: Ошибка преобразования данных XDTO: НачалоСвойства: wh_name Форма: Атрибут Тип: {http://www.w3.org/2001/XMLSchema}anySimpleType кто знает куда копать? |
|||
16
Саша Питерский
09.07.12
✎
17:27
|
(15) Что это за xml файл такой без заголовков и определенного namespace?
Что вот этой строкой хочется получить? Сериализатор.ПрочитатьXDTO(КорневойОбъектXDTO.warehouses.warehouse); |
|||
17
metanal
09.07.12
✎
17:29
|
таблицу значений с 1 строкой. или соответствие.что угодно с типом 1С а не объектXDTO
|
|||
18
Саша Питерский
09.07.12
✎
17:37
|
(17) А где у xml заголовок? Где в xsd описание того, в какой тип 1С должен превратиться wh_UID?
|
|||
19
metanal
09.07.12
✎
17:38
|
я только выдержки из файлов выложил.сами по себе файлы очень большие
|
|||
20
metanal
09.07.12
✎
17:39
|
а можно по подробнее про описание типа в xsd?
|
|||
21
metanal
09.07.12
✎
17:39
|
наверное этого мне и не хватает
|
|||
22
Саша Питерский
09.07.12
✎
18:11
|
Надо начать с того, что проверить, что файл соответствует схеме.
|
|||
23
metanal
09.07.12
✎
19:35
|
весь файл очень большой. я уверен что что-нибудь да не так. а как все таки привязать тип атрибута к типу 1С?
|
|||
24
Саша Питерский
10.07.12
✎
09:28
|
Загрузить схему в конфигурацию, затем открыть ее на редактирование, выбрать атрибут и выбрать у него тип, соответствующий нужному объекту 1С.
|
|||
25
metanal
10.07.12
✎
10:56
|
спасибо. попробую
|
|||
26
metanal
10.07.12
✎
15:02
|
вот что получилось:
http://gyazo.com/0488edd7a7a44ff02aff6fce11cf37ab я правильно понимаю , что мне нужно назначить Тип элемента? из какого пространства имен выбирать тип. 1с core? все варианты которые удалось пробовать не лишают меня ошибки из (15) |
|||
27
Саша Питерский
10.07.12
✎
15:05
|
(26) Приведи код вызова конструктора, которым ты создаешь тип Сериализатор.
|
|||
28
metanal
10.07.12
✎
15:07
|
Пути = Новый Массив();
Пути.Добавить("C:\Documents and Settings\Администратор\Рабочий стол\Metadata\awms new.xsd"); Фабрика = СоздатьФабрикуXDTO(Пути); Сериализатор = Новый СериализаторXDTO(Фабрика); ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл("C:\Documents and Settings\Администратор\Рабочий стол\Metadata\Разработка\awms.xml"); КорневойОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML, Неопределено); ЧтениеXML.Закрыть(); Сериализатор.ПрочитатьXDTO(КорневойОбъектXDTO.warehouses.warehouse); |
|||
29
Саша Питерский
10.07.12
✎
15:14
|
1. Тебе нужно указать тип элемента, то есть сказать например, что в указанном атрибуте хранится значение типа СправочникСсылка.Склады.
Если посмотреть список пакетов, то такую информацию можно найти в пакете http://v8.1c.ru/8.1/data/enterprise/current-config 2. Если ты меняешь тип в загруженном пакете, то потом либо внеси изменения в свой xsd, либо поменяй свой код создания фабрики на создание из метаданных, а не из файла 3. Я бы еще попробовал в код КорневойОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML, Неопределено); В качестве второго параметра не указывать неопределено, а либо вообще его пропустить, либо явно указать тип, который ты из файла читаешь. |
|||
30
metanal
10.07.12
✎
15:18
|
если не указывать "неопределено" вываливалось с ошибкой.
мне не обязательно привязывать к складам. мне бы хотя бы реквизит wh_name указать как строку. пространства имен http://v8.1c.ru/8.1/data/enterprise/current-config у меня почему то нет. конфа не типовая |
|||
31
Саша Питерский
10.07.12
✎
15:21
|
(30) С какой ошибкой? Раз ошибка, значит укажи конкретный тип.
Про хотя бы указать как строку не понял. КорневойОбъектXDTO.warehouses.warehouse.__content разве у тебя не является строкой? Указанное пространство имен указывает на твою текущую конфигурацию. Ей все равно, типовая конфа или нет. |
|||
32
metanal
10.07.12
✎
15:24
|
на строку вроде больше не ругается:
КорневойОбъектXDTO = Фабрика.ПрочитатьXML(ЧтениеXML); но теперь тип не определяется ) сейчас буду пробывать. свойства __content к сожалению у меня и в помине нет. |
|||
33
metanal
10.07.12
✎
15:31
|
и пакет я всегда экспортирую. до этого я хотя бы догадался
|
|||
34
metanal
10.07.12
✎
16:45
|
для wh_name в xsd проовал указывать все возможные типы из пространства имен http://v8.1c.ru/8.1/data/core.
ничего это не изменило <xs:attribute name="wh_name" use="required" type="ns1:**"> |
|||
35
Саша Питерский
10.07.12
✎
16:50
|
Если я правильно понимаю как должна работать платформа, Сериализатор по GUID вернет тебе ссылку на элемент склада.
У тебя GUID содержится в поле wh_UID. Соответственно можно попытаться в сериализатор передать КорневойОбъектXDTO.warehouses.warehouse.wh_UID Зачем ты пихаешь в схему типы из http://v8.1c.ru/8.1/data/core я не понимаю, поэтому ничего сказать не могу. |
|||
36
metanal
10.07.12
✎
16:59
|
затем что со складом это частный случай. потом у меня типы которые можно только как структуру прочитать. у меня возникает подозрение что мне вообще сериализация не нужна. а работать просто с фабрикой придется...
|
|||
37
metanal
10.07.12
✎
16:59
|
спасибо за помощь
|
|||
38
Саша Питерский
10.07.12
✎
17:03
|
Я предполагаю, что если ты укажешь тип из пространства имен что я указал, платорма сама тебе при чтении подставит нужную ссылку.
Я предполагаю что Сериализация нужна тогда, когда у тебя в xml есть GUID ссылки из ИБ, но при этом в самой схеме нет возможности указать пространство имен 1С. Если в твоем xml GUID указан вообще не из 1С взятый, то никакую автоматическую сериализацию ты не сделаешь. |
|||
39
metanal
11.07.12
✎
16:36
|
кто знает почему при чтении типа атрибута я всегда получаю AnySimpleType, хотя у меня например явно задан тип
xsi:type = "boolean" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |