|  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"   
				__________________ С уважением, Вячеслав. | 
|  |