Показать сообщение отдельно
Старый 13.02.2003, 14:16   #14  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Пример использования COM Axapta из другого приложения (например Fox, Delphi, C++).

То есть, как я понял, Аксапта является COM сервисом, а наше приложение COM клиентом. В этом случае понадобится COM Connector и соответственно лицензии на COM пользователей.
Я же имел в виду несколько иную ситуацию - наша прога - COM-сервер, Аксапта - COM клиент. В этом случае мы экономим на лицензии на COM-пользователя.

Это так, отступление. Теперь отвечаю на Ваш вопрос -

Под рукой нашлись исходники только на VB, но думаю разберетесь:

Пример 1 - Вызов методов какого либо Аксаптовского класса из нашей прог-мы:


' Коннектимся к Аксапте
Set axapta = New AxaptaCOMConnector.axapta
axapta.Logon "Admin", "", "", ""

Dim AxaptaQuery As AxaptaCOMConnector.IAxaptaObject
Dim AxaptaDataSource As AxaptaCOMConnector.IAxaptaObject
Dim AxaptaRange As AxaptaCOMConnector.IAxaptaObject
Dim CustTableBuffer As AxaptaCOMConnector.IAxaptaRecord
Dim s As String

' Создаю экземпляр класса
Set AxaptaQuery = axapta.CreateObject("myClass")

' Вызываю метод класса
AxaptaQuery.Call ("say")



Пример 2 - получение данных из Аксапты:

' Коннектимся к Аксапте
Set axapta = New AxaptaCOMConnector.axapta
axapta.Logon "Admin", "", "", ""

Dim AxaptaQuery As AxaptaCOMConnector.IAxaptaObject
Dim AxaptaDataSource As AxaptaCOMConnector.IAxaptaObject
Dim AxaptaRange As AxaptaCOMConnector.IAxaptaObject
Dim CustTableBuffer As AxaptaCOMConnector.IAxaptaRecord
Dim s As String

' Это то самое ID - свойство
CustTable = 77
CustTable_Name = 2

Set AxaptaQuery = axapta.CreateObject("Query")
Set AxaptaDataSource = AxaptaQuery.Call("AddDataSource", CustTable)
Set AxaptaRange = AxaptaDataSource.Call("AddRange", CustTable_Name)

AxaptaRange.Call "Value", "*"
Set AxaptaQueryRun = axapta.CreateObject("QueryRun", AxaptaQuery)

i = 1

While (AxaptaQueryRun.Call("Next"))
s = ""
Set CustTableBuffer = AxaptaQueryRun.Call("GetNo", 1)
s = s + Str(i) + " - " + CustTableBuffer.field("AccountNum")
s = s + " " + CustTableBuffer.field("Name")
s = s + " " + CustTableBuffer.field("Address")
s = s + " " + CustTableBuffer.field("Phone")
s = s + " " + CustTableBuffer.field("Telefax")

ListView.AddItem (s)

i = i + 1
Wend

Axapta.Logoff
Set Axapta = Nothing


А вообще, про это хорошо написано в руководстве разработчика