25.01.2002, 17:48 | #1 |
Участник
|
Взаимодействие с Аксаптой через COM+
Кто знает, подскажите, при подключении к Аксапте через СОМ создаем следующие обьекты, например:
Axapta, AxaptaQuery, AxaptaDataSource, AxaptaRange, AxaptaQueryRun, AxaptaTableBuffer. Каково время жизни обьектов? Например, "Axapta" нужен на протяжении всего сеанса (Logon, Logoff). "AxaptaQuery" и "AxaptaDataSource" уже труднее, нужно ли создавать новые при обращении к другой таблице или достаточно переопределить первые? Что происходит с переопределенными? Просто остаются в памяти до конца сеанса? Как можно их освободить? (=nil ?) И еще вопрос, как найти запись в базе? (Метод "Find" в "RecordSortedList" если кто использовал поделитесь). Пример кода на Delphi: procedure TForm1.FormCreate(Sender: TObject); begin Axapta := CreateCOMObject(StringToGUID('AxaptaCOMConnector.Axapta')) as IAxapta ; Axapta.Logon('Admin'); AxaptaQuery := Axapta.CreateObject('Query'); AxaptaDataSource := AxaptaQuery.Call('AddDataSource', CustTable); // 77 AxaptaRange := AxaptaDataSource.Call('AddRange', CustTable_Name); // 2 AxaptaRange.Call('Value', '*'); AxaptaQueryRun := Axapta.CreateObject( 'QueryRun', AxaptaQuery); While (AxaptaQueryRun.Call('Next')) do begin AxaptaTableBuffer := AxaptaQueryRun.Call('GetNo', 1); StrList.Add(AxaptaTableBuffer.field['AccountNum']); end; end; procedure TForm1.Button1Click(Sender: TObject); begin AxaptaDataSource := AxaptaQuery.Call('AddDataSource', VendTable); // 505 AxaptaRange := AxaptaDataSource.Call('AddRange', VendTable_Name); // 2 AxaptaRange.Call('Value', '*'); AxaptaQueryRun := Axapta.CreateObject( 'QueryRun', AxaptaQuery); While (AxaptaQueryRun.Call('Next')) do begin AxaptaTableBuffer := AxaptaQueryRun.Call('GetNo', 1); StrList.Add(AxaptaTableBuffer.field['AccountNum']); end; end; |
|
30.08.2004, 10:34 | #2 |
Участник
|
Привет ты случайно импорт через коннектор не добил... в Delphi
Можешь поделиться тайными знаниями ? |
|
30.08.2004, 10:51 | #3 |
Moderator
|
Хм.... насколько я помню COM, там сделано так. Вместо того, чтобы напрямую захватывать и удалять компонент мы сообщаем ему, что нам нужен некий интерфейс, а также, что мы закончили с этим интерфейсом работать. При этом компонент сам отслеживает, работает ли кто-нибудь с ним или нет, путем "подсчета ссылок".
Посмотри - у IUnknown есть для этого две функции-члена AddRef и Release. Это я так, общую концепцию описал. Если интересуют детали, рекомендую Роджерсона "Основы COM"/ |
|
30.08.2004, 11:46 | #4 |
Участник
|
;-(
|
|
22.11.2004, 16:18 | #5 |
Участник
|
Поделитесь информацией.... может у кого есть простейший пример?
|
|
22.11.2004, 16:21 | #6 |
Moderator
|
Простейший пример есть в Руководстве разработчика. В разделе Axapta Business Connector. Там на VB, но передалеть на Дельфи труда не составит.
|
|
22.11.2004, 17:16 | #7 |
Участник
|
Я в таких случаях стараюсь минимизировать количество объектов Аксапты, используемых в моих программах и поступаю так:
1. Весь код, который что-то делает в Аксапте, пишу внутри Аксапты 2. В Аксапте создаю класс и статический метод в классе, через который программа, написанная на другом языке будет вызывать аксаптовский код из первого пункта. 3. Вызываю этот статический метод из программы, написанной на другом языке, через AxaptaCOMConnector.Axapta2 :: CallStaticClassMethodEx() 4. Если мне в моей программе нужны данные из Аксапты, то я напрямую через ADO беру эти данные из базы Аксапты. То есть основные два момента такие: 1) Если нужно что-то изменить в базе данных Аксапты, то я пишу код в самой Аксапте и вызываю этот код из своей программы через COM-connector и метод CallStaticClassMethodEx(). 2) Если нужно что-то прочитать из базы данных Аксапты, то я напрямую соединяюсь к этой базе через ADO. |
|
22.11.2004, 17:23 | #8 |
Участник
|
Для velk - вот пример на VB
PHP код:
|
|
22.11.2004, 18:13 | #9 |
Участник
|
Цитата:
Изначально опубликовано Ace of Database
Я в таких случаях стараюсь минимизировать количество объектов Аксапты, используемых в моих программах и поступаю так: 2) Если нужно что-то прочитать из базы данных Аксапты, то я напрямую соединяюсь к этой базе через ADO. |
|
22.11.2004, 18:57 | #10 |
Участник
|
Странно конечно но нигде не нашел инфу по login2
может кто скажет какие параметры и что означают |
|
22.11.2004, 23:45 | #11 |
Участник
|
руководство разработчика
Axapta Business Connector \ Basics \ Reference Documentation \ IAxapta2 \ IAxapta2::Logon2 |
|
23.11.2004, 10:46 | #12 |
Участник
|
Может кто поделится руководствами разработчика.....
ОЧЕНЬ НУЖНО... СПАСИБО |
|
23.11.2004, 11:55 | #13 |
Участник
|
бог ты мой!
в дистрибутиве. или в каталоге bin. или возьмите здесь http://technet.navision.com/usered/A...02.00-ENUS.zip |
|
26.01.2005, 08:24 | #14 |
Участник
|
есть ли работающий пример на Delphi?
есть ли работающий пример на Delphi?
|
|
21.06.2005, 10:04 | #15 |
Участник
|
Получается этот пример работает только для двухзвенки?
А для трехзвенки как использовать? Помогите пожалуйста!!!!! |
|
21.06.2005, 10:24 | #16 |
сибиряк
|
Цитата:
Изначально опубликовано velk
Получается этот пример работает только для двухзвенки?
__________________
С уважением, Вячеслав. |
|
21.06.2005, 11:10 | #17 |
Участник
|
Тогда подскажите какие настройки должны быть в Navision Axapta Configuration Utility
если конечно это там что то надо донастраивать.... может Logon необходимо дополнить какимито параметрами??? У меня для двухзвенки все работает прекрасно... как только перевожу на трехзвенку то возникает ошибка на строке ax.Logon2 "Admin", "", "", , , , "" |
|
21.06.2005, 11:37 | #18 |
сибиряк
|
Цитата:
Изначально опубликовано velk
на строке ax.Logon2 "Admin", "", "", , , , "" Application("webAxapta").Logon "webuser", "" , "", ""
__________________
С уважением, Вячеслав. |
|
21.06.2005, 12:32 | #19 |
Участник
|
Вот мой код
Set Axapta = CreateObject("AxaptaCOMConnector.Axapta") на этой строке возникает ошибка - Неопознаная ошибка Axapta.Logon "adminl", "adminpassword", "", "" Axapta.Logoff |
|
21.06.2005, 15:58 | #20 |
сибиряк
|
Цитата:
Изначально опубликовано velk
"adminpassword"
__________________
С уважением, Вячеслав. |
|