Показать сообщение отдельно
Старый 19.12.2014, 15:40   #11  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,657 / 1158 (42) ++++++++
Регистрация: 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 не изменилась. Так что, особых сложностей быть не должно. Ну, может синтаксис местами будет чуть другой
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...