Расскажу, как задача была решена с помощью .NET коннектора - может, кому-то пригодится.
Сначала пробовал COM-коннектор, но: во первых он морально устарел, его лучше сейчас не использовать.
Во вторых, при вызове из приложения 1 (далее П1) кода приложения 2 (далее П2) через ком-коннектор - передается строка размером до 1000 байт. Через .NET же передается строка
любого размера (проверено на строке размером в 100 килобайт), то есть между приложениями можно передать в принципе любую осмысленную информацию.
Для передачи строки таблицы или другого сложного объекта можно использовать
xml и функции преобразования.
Итак. Тестовая задача: передать из П1 в П2 на обработку только что заведенного в П1 клиента.
Перво-наперво, в репозитарий AOT П1, в ветку
References, добавляем сборку
Microsoft.Dynamics.BusinessConnectorNet.
Вызывающий код в П1:
X++:
static void testNETres(Args _args)
{
Microsoft.Dynamics.BusinessConnectorNet.Axapta ax;
Microsoft.Dynamics.BusinessConnectorNet.AxaptaObject axObj;
CustTable ct;
int xmlLen, resLen, bigLen, i;
str xml, res, s, resres;
;
select firstonly ct;
s = ct.xml();
xmlLen = strLen(s);
ax = new Microsoft.Dynamics.BusinessConnectorNet.Axapta();
ax.Logon("","","","");
axObj = ax.CreateAxaptaObject("test_Appl2");
res = axObj.Call('test_NET', s);
res = '';
}
В П2, в классе
test_Appl2 создаем метод
test_NET в котором осуществляется обработка переданного клиента.
X++:
str test_NET(str _s)
{
custTable xTable;
XmlDocument xmlDocument = new XmlDocument();
str xml;
;
xml = _s;
if (xmlDocument.loadXml(xml))
{
Global::recordFromXMLNode(xmlDocument.documentElement(), xTable);
// дальше можно делать с клиентом все что надо
// ...
return xTable.Name;
}
return xml;
}
Вот так вот на самом деле просто всё.