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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.12.2014, 13:16   #1  
Эдик is offline
Эдик
Участник
 
9 / 10 (1) +
Регистрация: 24.02.2004
Адрес: Москва
Как связать 2 Аксапты
Есть 2 Аксапты (4.0) необходимо из одной данные передавать в другую.
Какие есть варианты?
Если вариант BC - как из аксапты вызвать статик метод с параметрами. Не получается.
Старый 19.12.2014, 13:21   #2  
abv2703 is offline
abv2703
Участник
 
92 / 22 (1) +++
Регистрация: 05.12.2003
Адрес: Санкт-Петербург, улица Бухарестсткая
Как связать
Если совсем просто, то сделать буферную базку и из одной Ax писать в нее прямыми запросами, а из другой забирать тоже прямыми запросами по признаку "прочитано" = 0. При этом устанавливать этот признак в 1. Забирать можно в пакетном режиме.
Старый 19.12.2014, 13:25   #3  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
305 / 873 (30) +++++++
Регистрация: 23.10.2012
Tutorial морской бой (в формах).
Старый 19.12.2014, 13:28   #4  
abv2703 is offline
abv2703
Участник
 
92 / 22 (1) +++
Регистрация: 05.12.2003
Адрес: Санкт-Петербург, улица Бухарестсткая
Няма в 4-ке
Старый 19.12.2014, 14:12   #6  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Обновить до AX2012 R3 и настроить Master Data Management.
За это сообщение автора поблагодарили: Ivanhoe (1).
Старый 19.12.2014, 14:23   #7  
maksa2k is offline
maksa2k
Участник
 
10 / 10 (1) +
Регистрация: 10.05.2011
В BI входит такая утилита, как SSIS можно с ее помощью читать данные из одной базы и вставлять в другую
Старый 19.12.2014, 14:45   #8  
Эдик is offline
Эдик
Участник
 
9 / 10 (1) +
Регистрация: 24.02.2004
Адрес: Москва
Задача синхронизировать справочники. Примерно 10 таблиц, по много полей в каждой. Хорошо бы редактировать online.
Вариант перейти на 2013 - не подходит. Надо с 4.0 на 4.0

Вариант с буферной базой (таблицами в одной из них) - рассматривается. Хотелось бы только избежать жуткого парсинга по полям.

А вариант через бизнес-коннектор передать запись? Никто не использовал такую связку Аксапта-Аксапта?

Последний раз редактировалось Эдик; 19.12.2014 в 14:53.
Старый 19.12.2014, 15:04   #9  
Эдик is offline
Эдик
Участник
 
9 / 10 (1) +
Регистрация: 24.02.2004
Адрес: Москва
Цитата:
Сообщение от abv2703 Посмотреть сообщение
Няма в 4-ке
??? не понял про няму
Старый 19.12.2014, 15:10   #10  
Artoodeetoo is offline
Artoodeetoo
Участник
Аватар для Artoodeetoo
 
22 / 10 (1) +
Регистрация: 01.11.2010
Ничто не мешает даже писать напрямую в базу смежной системы (если доступна конечно) запросом SQL.

Но вы думаете о технологиях, а технологии здесь вторичны.
Подумайте сначала о методике сквозного кодирования номенклатур, о необходимой скорости репликации, что вы будете делать с дублями и ошибками, кто главный в этом процессе, что делать если тут я завел а потом там удалил и тд.
Старый 19.12.2014, 15:40   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Эдик Посмотреть сообщение
А вариант через бизнес-коннектор передать запись? Никто не использовал такую связку Аксапта-Аксапта?
Делал я такое. Правда в Ax2.5 и там это был ComConnector. Никаких принципиальных сложностей нет. Недельку правда придется помучиться, чтобы понять как там и что Я для этого написал свою "обертку".

Если без "обертки" в "чистом виде", то будет примерно так (как ни странно, но это все было в справке разработчика Ax2.5 )

X++:
str 	m_sProgID;
str 	m_sProgIDParmList;
Com 	axCom;
Com 	axComParmList;	// COM объект для списка параметров
ComVariant  comRetVal;

m_sProgID           = "AxaptaCOMConnector.Axapta2";
m_sProgIDParmList   = "AxaptaCOMConnector.AxaptaParameterList";

axCom       	= new COM(m_sProgID);   	// COM interface initialization
axComParmList   = new COM(m_sProgIDParmList);   // COM interface initialization


/*
UserId      _userId,                    // Логин пользователя. При Windows-аутентификации - не обязателен
Str 20      _password,                  // Пароль пользователя. При Windows-аутентификации - не обязателен
DataAreaId  _dataAreaId,                // компания при подключении
LanguageId  _languageId     = "ru",     // язык при подключении
Str 20      _serverManager  = "",       // Имя серверного менеджера, к которому предполагается подкючиться
Str 20      _objectServer   = "",       // Имя AOS, к которому предполагается подключиться
Str 1000    _configuration  = ""        // Имя конфигурации на компьютере или путь доступа к файлу конфигурации
*/

axCom.Logon2(_userId, _password, _dataAreaId, _languageId, _serverManager, _objectServer, _configuration);

if ( )
{
	// Значения параметров надо преобразовывать из EDT к базовым типам!
	axComParmList.size(2);
	axComParmList.element(1,any2str('Текст'))
	axComParmList.element(2,any2int(123))

	// Вызов статического метода MyClassName::MyStaticMethodName()
	// Передав в качестве параметра список значений
	comRetVal = axCom.CallStaticClassMethodEx("MyClassName","MyStaticMethodName",axComParmList);
}
else
{
	// Вызов статического метода MyClassName::MyStaticMethodName() без передачи параметров
	comRetVal = axCom.CallStaticClassMethod("MyClassName","MyStaticMethodName");
}

// Разбор полученного значения
// AxaptaCOMConnector возвращает значения ВСЕГДА в виде объекта COMVariant
// поэтому, необходимо дополнительное преобразование полученного значения
/*
switch (comRetVal.variantType())
{
case COMVariantType::VT_BOOL :
	return comRetVal.boolean();       // boolean
case COMVariantType::VT_BSTR :
	return comRetVal.bStr();          // str
case COMVariantType::VT_UI1 :
	return comRetVal.byte();          // int
case COMVariantType::VT_I1 :
	return comRetVal.char();          // int
case COMVariantType::VT_CY :
	return comRetVal.currency();      // real
case COMVariantType::VT_DATE :
	return comRetVal.date();          // date
case COMVariantType::VT_DECIMAL :
	return comRetVal.decimal();       // real
case COMVariantType::VT_R8 :
	return comRetVal.double();        // real
case COMVariantType::VT_R4 :
	return comRetVal.float();         // real
case COMVariantType::VT_DISPATCH :
//        return comRetVal.iDispatch();           // дескриптор COM-интерфейса. Число.
case COMVariantType::VT_I4 :            // int
	return comRetVal.int();
//        return comRetVal.long();          // теоретически, это должно быть VT_I8, но такого значения нет, поэтому VT_I4 читается как int()
case COMVariantType::VT_UNKNOWN :
//return comRetVal.iUnknown();                // дескриптор COM-интерфейса. Число.
	return COM::createFromVariant(comRetVal);     // Преобразую в ссылку на объект
case COMVariantType::VT_ERROR :
	return comRetVal.sCode();         // int
case COMVariantType::VT_I2 :
	return comRetVal.short();         // int

case COMVariantType::VT_UI4 :
	return comRetVal.uInt();         // int
	//return comRetVal.uLong();         // теоретически, это должно быть VT_UI8, но такого значения нет, поэтому VT_I4 читается как int()
case COMVariantType::VT_UI2 :
	return comRetVal.uShort();        // int
case COMVariantType::VT_VARIANT :
	return comRetVal.variant();       // COMVariant
case COMVariantType::VT_SAFEARRAY :
	return comRetVal.safeArray();     // array
default :
	throw error(strFmt("Неизвестны правила обработки типа %1", comRetVal.variantType()));
}

*/
В данном случае я использовал метод Ex, чтобы иметь возможность передавать параметры сразу списком, а не писать кучу разных методов в зависимости от количества параметров.

Вам остается только адптировать это "добро" под COM Business Connector. Насколько я вижу, принципиально, схема работы с COM Business Connector не изменилась. Так что, особых сложностей быть не должно. Ну, может синтаксис местами будет чуть другой
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 19.12.2014, 15:43   #12  
abv2703 is offline
abv2703
Участник
 
92 / 22 (1) +++
Регистрация: 05.12.2003
Адрес: Санкт-Петербург, улица Бухарестсткая
в смысле, нету в 4-ке такой формы. Виноват.
Старый 19.12.2014, 23:15   #13  
axbegin is offline
axbegin
Участник
 
14 / 10 (1) +
Регистрация: 16.06.2008
По старинке: linked server + triggers.
Старый 19.12.2014, 23:21   #14  
mnt_dx is offline
mnt_dx
Участник
Axapta Retail User
Лучший по профессии 2014
 
1,747 / 188 (10) ++++++
Регистрация: 17.02.2011
Адрес: К Северу через Северо-Запад
Эдик, периодический экспорт/импорт?
Старый 20.12.2014, 00:37   #15  
ice321i is offline
ice321i
Участник
 
63 / 54 (2) ++++
Регистрация: 22.10.2007
А почему бы не посмотреть в сторону AIF??? )))))
Старый 20.12.2014, 16:38   #16  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Вам нужно решить техническую проблему или методологическую?
  • А в этих базах элементы справочников с одинаковыми кодами это одна сущность или в одной клиент с кодом "РогаИКопыта" это судостроительный завод, а в другой это администрация города?
  • Данные конкретных справочников вводятся в отдельной базе или в одной, а распределяются в другие, или могут вноситься во всех базах и распределяться на другие?
  • Ну и тому подобное.
Если проблема техническая, то:
Цитата:
Если вариант BC - как из аксапты вызвать статик метод с параметрами. Не получается.
В чем тут проблема?
  • Вы не знаете как дергать NET Connector из Аксапты или как вызывать статический метод через NET Коннектор?
  • У Вас не получилось дернуть метод Logon NET класса Microsoft.Dynamics.BusinessConnectorNet.Axapta?
  • Что-то еще?
Из одной сессии Аксы подключение к другой при помощи NET коннектора отлично работает в DAX2009 и в DAX4. Что именно не получается?
За это сообщение автора поблагодарили: Kabardian (2).
Старый 07.06.2015, 13:59   #17  
epic is offline
epic
Участник
 
43 / 10 (1) +
Регистрация: 22.12.2006
Всем привет.
Из одной АХ через .net BC вызываем статический метод в другой АХ. результат хотим получить в первой АХ из объекта, который возвращает .net BC
Старый 08.06.2015, 07:38   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от epic Посмотреть сообщение
результат хотим получить в первой АХ из объекта, который возвращает .net BC
Вы же понимаете, что вернётся не AX объект, а Net. И то что с коннектором вы работаете из под аксапты на это никак не повлияет. Это тоже самое как если бы вы обращались во вторую аксапту из Visual Studio. Я даже советую вам сначала оттестировать весь код по работе с net BC на C# (там отладчик получше, видны конкретные типы и т.д.), а уже потом переносить его в аксапту.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Конфигурация сети для Аксапты с Порталом Narayana DAX: Администрирование 4 19.12.2012 10:45
Как сильно модифицировано ваше приложение Аксапты? mazzy DAX: Прочие вопросы 30 14.04.2011 17:26
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
Программный запуск Аксапты из Аксапты DreamCreator DAX: Программирование 11 04.05.2009 10:05
Экспорт / импорт Help topics и запуск второй сессии Аксапты из-под себя DmitrySt DAX: Программирование 0 25.11.2004 00:22

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

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

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