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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2015, 13:16   #1  
kitty is offline
kitty
Участник
 
370 / 30 (2) +++
Регистрация: 24.05.2005
Знатоки C# , помогите с webservices
Есть внешний вебсервис, который надо вызывать из аксапты.
Для этого есть три разных wsdl: каждый соответствует соответствующей dev, test или prod инсталляции.
Набор объектов/методов в них одинаковые

Чтобы вызывать эти вебсервисы создано три c# проекта. У каждого свой namespace
SomeClass.DEV, SomeClass.TEST, SomeClass.PROD , но каждый по сути имеет внутри одну и ту же логику(один и тот же набор методов)

В AX соответственно пишется :
Если текущий environment = TEST, то myObj = MyPrjNamespace.TEST. methodAbc()
Если текущий environment = DEV, то myObj = MyPrjNamespace.DEV. methodAbc()
etc

Вообщем, выглядит коряво, но я не знаю, может, оно так и правильно? ((

В теории , мне кажется, можно было бы добавить все три wsdl в один проект и передавать параметр - методы из какого serviceRef вызывать. Но тут у меня возникает вопрос:
Если добавить в один проект три разных ServiceRef, то будет три namespace:
MyPrjNamespace.ServiceRef1, MyPrjNamespace.ServiceRef2, MyPrjNamespace.ServiceRef3
Соответственно, если есть сейчас какой-то метод, создающий некий объект:
createMyObj()
{
myObj = new MyPrjNamespace.ServiceRef1.objectToCreate();
}
то как должен выглядеть этот метод, если надо создать этот объект из соответствующего ServiceRef (одного из трех)?

То есть, можно ли, передав из аксапты имя текущего environment, присвоить некоторому alias выбранный namespace, и поэтому не писать вот так:
X++:
createMyObj()
{
    if (environmentParam = 'DEV')
          myObj = new MyPrjNamespace.ServiceRef1.objectToCreate();
    if (environmentParam = 'TEST')
          myObj = new MyPrjNamespace.ServiceRef2.objectToCreate();
    if (environmentParam = 'UAT')
          myObj = new MyPrjNamespace.ServiceRef3.objectToCreate();
}
createMyOtherObj()
{
    if (environmentParam = 'DEV')
          myOtherObj = new MyPrjNamespace.ServiceRef1.someOtherObjectToCreate();
    if (environmentParam = 'TEST')
          myOtherObj = new MyPrjNamespace.ServiceRef2.someOtherObjectToCreate();
    if (environmentParam = 'UAT')
          myOtherObj = new MyPrjNamespace.ServiceRef3.someOtherObjectToCreate();
}
а вот так - сразу установить alias:
X++:
setNameSpaceAlias()
{

  if (environmentParam = 'DEV')
          MyPrjNamespace.ServiceRefAlias = new MyPrjNamespace.ServiceRef1;
    if (environmentParam = 'TEST')
          MyPrjNamespace.ServiceRefAlias = new MyPrjNamespace.ServiceRef2;
    if (environmentParam = 'UAT')
          MyPrjNamespace.ServiceRefAlias = new MyPrjNamespace.ServiceRef3;
}

        alias:

createMyObj()
{
          myObj = new MyPrjNamespace.ServiceRefAlias.objectToCreate();
}
createMyOtherObj()
{
          myOtherObj = new MyPrjNamespace.ServiceRefAlias.someOtherObjectToCreate();
}

etc
PS: Проблема в том, что сейчас у нас одна компания live, а хотят еще 2 запустить. Для каждой компании сделать по отдельному wsdl(все с одинаковыми методами) и получается, что код(как он написан сейчас, т.е по проекту на det/test/prod) аж 9 раз будет дублироваться (3 environment * 3 legal entities). Посоветуйте, как переключаться между 9 wsdl но при этом избежать дублирования кода
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Знатоки AIF, помогите! arty DAX: Программирование 1 25.10.2012 18:36
daxmusings: Consuming External Webservices in AX 2012 Blog bot DAX Blogs 0 20.10.2011 10:11
daxdilip: Question - How to Scale out AIF WebServices via Load Balancer Blog bot DAX Blogs 0 23.02.2011 14:11
помогите с palletId.allowEdit() Varmen DAX: Программирование 1 26.03.2009 17:24
Курсовые разницы! Помогите! SSM DAX: Функционал 7 26.09.2005 11:10
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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