19.12.2014, 13:16 | #1 |
Участник
|
Как связать 2 Аксапты
Есть 2 Аксапты (4.0) необходимо из одной данные передавать в другую.
Какие есть варианты? Если вариант BC - как из аксапты вызвать статик метод с параметрами. Не получается. |
|
19.12.2014, 13:21 | #2 |
Участник
|
Как связать
Если совсем просто, то сделать буферную базку и из одной Ax писать в нее прямыми запросами, а из другой забирать тоже прямыми запросами по признаку "прочитано" = 0. При этом устанавливать этот признак в 1. Забирать можно в пакетном режиме.
|
|
19.12.2014, 13:25 | #3 |
Участник
|
Tutorial морской бой (в формах).
|
|
19.12.2014, 13:28 | #4 |
Участник
|
Няма в 4-ке
|
|
19.12.2014, 14:00 | #5 |
Аманд
|
Базы разнесены?
Цель объединить данные или просто передать пул заказов, проводки? |
|
19.12.2014, 14:12 | #6 |
Banned
|
Обновить до AX2012 R3 и настроить Master Data Management.
|
|
|
За это сообщение автора поблагодарили: Ivanhoe (1). |
19.12.2014, 14:23 | #7 |
Участник
|
В BI входит такая утилита, как SSIS можно с ее помощью читать данные из одной базы и вставлять в другую
|
|
19.12.2014, 14:45 | #8 |
Участник
|
Задача синхронизировать справочники. Примерно 10 таблиц, по много полей в каждой. Хорошо бы редактировать online.
Вариант перейти на 2013 - не подходит. Надо с 4.0 на 4.0 Вариант с буферной базой (таблицами в одной из них) - рассматривается. Хотелось бы только избежать жуткого парсинга по полям. А вариант через бизнес-коннектор передать запись? Никто не использовал такую связку Аксапта-Аксапта? Последний раз редактировалось Эдик; 19.12.2014 в 14:53. |
|
19.12.2014, 15:04 | #9 |
Участник
|
|
|
19.12.2014, 15:10 | #10 |
Участник
|
Ничто не мешает даже писать напрямую в базу смежной системы (если доступна конечно) запросом SQL.
Но вы думаете о технологиях, а технологии здесь вторичны. Подумайте сначала о методике сквозного кодирования номенклатур, о необходимой скорости репликации, что вы будете делать с дублями и ошибками, кто главный в этом процессе, что делать если тут я завел а потом там удалил и тд. |
|
19.12.2014, 15:40 | #11 |
Участник
|
Цитата:
Если без "обертки" в "чистом виде", то будет примерно так (как ни странно, но это все было в справке разработчика 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())); } */ Вам остается только адптировать это "добро" под COM Business Connector. Насколько я вижу, принципиально, схема работы с COM Business Connector не изменилась. Так что, особых сложностей быть не должно. Ну, может синтаксис местами будет чуть другой
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
19.12.2014, 15:43 | #12 |
Участник
|
в смысле, нету в 4-ке такой формы. Виноват.
|
|
19.12.2014, 23:15 | #13 |
Участник
|
По старинке: linked server + triggers.
|
|
19.12.2014, 23:21 | #14 |
Участник
|
Эдик, периодический экспорт/импорт?
|
|
20.12.2014, 00:37 | #15 |
Участник
|
А почему бы не посмотреть в сторону AIF??? )))))
|
|
20.12.2014, 16:38 | #16 |
Участник
|
Вам нужно решить техническую проблему или методологическую?
Цитата:
Если вариант BC - как из аксапты вызвать статик метод с параметрами. Не получается.
|
|
|
За это сообщение автора поблагодарили: Kabardian (2). |
07.06.2015, 13:59 | #17 |
Участник
|
Всем привет.
Из одной АХ через .net BC вызываем статический метод в другой АХ. результат хотим получить в первой АХ из объекта, который возвращает .net BC |
|
08.06.2015, 07:38 | #18 |
Участник
|
Вы же понимаете, что вернётся не AX объект, а Net. И то что с коннектором вы работаете из под аксапты на это никак не повлияет. Это тоже самое как если бы вы обращались во вторую аксапту из Visual Studio. Я даже советую вам сначала оттестировать весь код по работе с net BC на C# (там отладчик получше, видны конкретные типы и т.д.), а уже потом переносить его в аксапту.
|
|