AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.06.2023, 18:45   #1  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
? web-сервис Документооборот 2.0
Коллеги, добрый день
ax2009 5.0.1500.6491

Помогите, пожалуйста, c web-сервисами в аксапте знакомлюсь впервые.

Используем коробочный сервис для создания документа в 1С.
При этом строковые поля передаются в документ (на стороне 1С) нормально, но числа и даты - нет.
Т.е. в коде на стороне аксапты я задаю значения через методы set, если тут же смотрю через get, то значения есть и они выводятся.
Если после сборки объекта (документа) формирую из него xml при помощи AifUtil::serializeClrObject() метод взят здесь на форуме, то теги с проблемными значениями просто не формируются(их_нет\отсутствуют).

На стороне 1С соответствующие переменные видят просто пустыми (незаполненными)
Примеров взаимодействия с данным сервисом в доступных приложениях нет.
Цитаты из xsd:
сумма
<xs:element name="sum" type="xs:decimal" minOccurs="0"/>
дата
<xs:element name="regDate" type="xs:dateTime" minOccurs="0"/>

входные параметры в аксапте соответственно:
сумма
set_sum(Decimal value)
дата
set_regDate(DateTime value)

в декларации
X++:
DocOb2.DMInternalDocument           intDoc;
где DocOb2 - узел References в AOT

для задания значений было использовано:
сумма
X++:
intDoc.set_sum(new System.Decimal(99));
дата
1.
X++:
intDoc.set_regDate(systemdateget());
2.
X++:
        //через System.
        SystemDTime = System.DateTime::SpecifyKind(DatetimeUtil::getSystemDateTime(), System.DateTimeKind::Local);
        intDoc.set_regDate(SystemDTime); 
        info(System.Convert::ToString(SystemDTime));
3.
X++:
        //через UTC
        utcDateTime                         myDTime;
        System.DateTime                     myDTime1; 
        ;
        myDTime  = datetimeutil::getSystemDateTime();
        myDTime1 = Global::utcDateTime2SystemDateTime(myDTime);
        intDoc.set_regDate(new System.DateTime(myDTime1));
        info(System.Convert::ToString(myDTime1));

при этом дата, передаваемая след образом, - передаётся без использования каких либо изысков просто через systemdateget()
<xs:element name="propertySimpleValue" nillable="true" minOccurs="0"/>
входные параметры в аксапте
set_propertySimpleValue(Object value);
задание значения:
X++:
addPropDatePaymentContract.set_propertySimpleValue(systemdateget());
со слов коллег nillable="true" мы не можем использовать т.к. sum и regDate обязательные, а nillable="true" может быть использовано только для необязательных свойств\атрибутов

после отправки собранного документа через DMCreateReques

X++:
        DocOb2.DMError           error;
        ;
        createRequest = new DocOb2.DMCreateRequest();
        createRequest.set_object(intDoc);
        //createResponce = servClient.execute(createRequest);
        error = servClient.execute(createRequest);
получаем ошибку из error
по причине:
Ошибка при выполнении обработчика - 'ПриЗаписи'
по причине:
Преобразование значения к типу Число не может быть выполнено

подскажите, пожалуйста, как сие преодолеть?
проблема в синтаксисе?
проблема в настройках сервера?
проблема в настройках сервиса?

небольшой доп. вопрос
результат servClient.execute(createRequest); я могу забрать или в error или в createResponce, во время отладки я могу менять объекты, но это не приемлемо для рабочего кода. подскажите как написать код чтобы при успешной обработке запроса выдать соответствующее сообщение об успехе, а при возникновении ошибки получить доступ к get_subject и get_description которые реализованы в error?

X++:
        DocOb2.DMError           error;
        DocOb2.DMCreateResponce  createResponce;
        ;
        //createResponce = servClient.execute(createRequest);
        error = servClient.execute(createRequest); 
        if (error)
        {
            //error = createResponce.get_object();
            info (error.get_subject());
            info (error.get_description());
        }
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.

Последний раз редактировалось jeky; 04.06.2023 в 19:46. Причина: редактирование текста
Старый 05.06.2023, 16:51   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от jeky Посмотреть сообщение
Если после сборки объекта (документа) формирую из него xml при помощи AifUtil::serializeClrObject() метод взят здесь на форуме, то теги с проблемными значениями просто не формируются(их_нет\отсутствуют).

в декларации
X++:
DocOb2.DMInternalDocument           intDoc;
где DocOb2 - узел References в AOT
Прикрепите что ли DLL-ку (или что там?), на которую ссылается DocOb2. А то трудно понять, что не так.
Старый 05.06.2023, 17:20   #3  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Прикрепите что ли DLL-ку (или что там?), на которую ссылается DocOb2. А то трудно понять, что не так.
Есть DLL от платформы 1с для Iis, Вы про это?
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Старый 05.06.2023, 20:08   #4  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
Цитата:
Сообщение от gl00mie Посмотреть сообщение
Прикрепите что ли DLL-ку (или что там?), на которую ссылается DocOb2. А то трудно понять, что не так.
DLL DocOb2.dll не цепляется, окно форума ругается, что некорректный файл
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Старый 06.06.2023, 13:40   #5  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
Итог:
Создали свой простой сервис, все значения передались.
Сделали упрощённый сервис на базе схемы 1С, значения не передались ни через аксапту, ни через Visual Studio, так что всё же где-то проблема "на стороне сервиса".
Разбираемся.
Если кто-то боролся с подобной проблемой: значения в объект задаются, но не приходят в 1С, - напишите, пожалуйста.
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Старый 06.06.2023, 15:14   #6  
Lucky13 is offline
Lucky13
Участник
1C
 
714 / 198 (8) ++++++
Регистрация: 21.10.2004
Цитата:
Сообщение от jeky Посмотреть сообщение
Итог:
Создали свой простой сервис, все значения передались.
Сделали упрощённый сервис на базе схемы 1С, значения не передались ни через аксапту, ни через Visual Studio, так что всё же где-то проблема "на стороне сервиса".
Разбираемся.
Если кто-то боролся с подобной проблемой: значения в объект задаются, но не приходят в 1С, - напишите, пожалуйста.
Как я понимаю, на стороне 1С у вас Web-сервис. А какой тип значения параметра у вызываемого метода указан? Там может быть простой тип, например, string (http://www.w3.org/2001/XMLSchema), тогда, скорее всего, все работает, а может быть сложный, со ссылкой на какую-то свою схему, тогда видимо и возникает ошибка
Старый 06.06.2023, 15:43   #7  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
Цитата:
Сообщение от Lucky13 Посмотреть сообщение
Как я понимаю, на стороне 1С у вас Web-сервис. А какой тип значения параметра у вызываемого метода указан? Там может быть простой тип, например, string (http://www.w3.org/2001/XMLSchema), тогда, скорее всего, все работает, а может быть сложный, со ссылкой на какую-то свою схему, тогда видимо и возникает ошибка
String передается нормально.
Не передаются простые типы DateTime и Decimal, сегодня пробовали также integer (тоже не передался)
Типы, которые не передаются, описаны вот так в схеме
Цитата:
Сообщение от jeky Посмотреть сообщение
Цитаты из xsd:
сумма
<xs:element name="sum" type="xs:decimal" minOccurs="0"/>
дата
<xs:element name="regDate" type="xs:dateTime" minOccurs="0"/>
...
входные параметры в аксапте соответственно:
сумма
set_sum(Decimal value)
дата
set_regDate(DateTime value)
...
при этом дата, передаваемая в составе сложного типа - передаётся
<xs:element name="propertySimpleValue" nillable="true" minOccurs="0"/>
входные параметры в аксапте
set_propertySimpleValue(Object value);
задание значения:
X++:
addPropDatePaymentContract.set_propertySimpleValue(systemdateget());
Отличие между передаваемой и непередаваемой датами в том, что первая запрашивается через DateTime, вторая через Object.
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Старый 08.06.2023, 17:01   #8  
jeky is offline
jeky
:o)
Аватар для jeky
 
131 / 64 (3) ++++
Регистрация: 22.05.2008
Уважаемые коллеги, кто-нибудь работал с коробочным сервисом DMService от 1C?
Тема актуальна.
__________________
"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.
Старый 09.08.2023, 09:55   #9  
DeAmouSE is offline
DeAmouSE
Участник
 
2 / 11 (1) +
Регистрация: 16.10.2013
Работал с коробочным веб сервисом DMService от 1С.
Но схема у нас была построена, что аксапта формировала запрос в формате json, отправляли на интеграционную шину. Шина конвертировала запрос в xml и собирала SOAP и отправляет на веб сервис. Полученный ответ, конвертируется в json и возвращала аксапте.
В основном создавали внутренние документы, отправляли и получали файлы.

Заметил при работе одну из особенностей, что нужно правильно передавать порядок полей. Если одно поле окажется выше чем нужно, то будет ошибка на стороне веб сервиса.
По этому в Visual Studio в проекте конектился к веб сервису путем добавлений ссылки на его. Затем формировал объект DMInternalDocument который автоматически сгенерировался при добавление ссылки, и отправлял запрос.
И смотрел какой soap запрос отправился. И в такой же последовательности собирал запрос у себя.
Теги
1c, web, web service, web сервис, документооборот 2.0, интеграция с 1с

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX2012 R3 WMDP, Разрешить ввод "<" в поля web-формы (ошибка "A potentially dangerous Request.Form value was detected from the client") RSrd DAX: Программирование 2 27.02.2020 15:19
emeadaxsupport: How to update AX 2012 Enterprise Portal in a multi-server web farm Blog bot DAX Blogs 0 09.11.2015 13:11
Inside Dynamics AX 4.0: The Web Framework Blog bot DAX Blogs 0 25.10.2007 03:04
Pokluda: Outbound web service (AIF) Blog bot DAX Blogs 0 28.10.2006 17:43
Axapta Web Dployment Client и разные сервис паки dreshkov_imported DAX: Администрирование 1 29.09.2004 13:02

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 09:03.