Цитата:
Сообщение от
Эдик
А вариант через бизнес-коннектор передать запись? Никто не использовал такую связку Аксапта-Аксапта?
Делал я такое. Правда в 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 не изменилась. Так что, особых сложностей быть не должно. Ну, может синтаксис местами будет чуть другой