AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 25.01.2002, 17:48   #1  
banbery is offline
banbery
Участник
 
1 / 10 (1) +
Регистрация: 25.01.2002
? Взаимодействие с Аксаптой через 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  
ShadowFromXZone is offline
ShadowFromXZone
Участник
Аватар для ShadowFromXZone
 
288 / 0 (1) +
Регистрация: 29.09.2003
Привет ты случайно импорт через коннектор не добил... в Delphi

Можешь поделиться тайными знаниями ?
Старый 30.08.2004, 10:51   #3  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Хм.... насколько я помню COM, там сделано так. Вместо того, чтобы напрямую захватывать и удалять компонент мы сообщаем ему, что нам нужен некий интерфейс, а также, что мы закончили с этим интерфейсом работать. При этом компонент сам отслеживает, работает ли кто-нибудь с ним или нет, путем "подсчета ссылок".
Посмотри - у IUnknown есть для этого две функции-члена AddRef и Release.

Это я так, общую концепцию описал. Если интересуют детали, рекомендую Роджерсона "Основы COM"/
Старый 22.11.2004, 16:18   #5  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Поделитесь информацией.... может у кого есть простейший пример?
Старый 22.11.2004, 16:21   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Простейший пример есть в Руководстве разработчика. В разделе Axapta Business Connector. Там на VB, но передалеть на Дельфи труда не составит.
Старый 22.11.2004, 17:16   #7  
online
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Я в таких случаях стараюсь минимизировать количество объектов Аксапты, используемых в моих программах и поступаю так:
1. Весь код, который что-то делает в Аксапте, пишу внутри Аксапты
2. В Аксапте создаю класс и статический метод в классе, через который программа, написанная на другом языке будет вызывать аксаптовский код из первого пункта.
3. Вызываю этот статический метод из программы, написанной на другом языке, через AxaptaCOMConnector.Axapta2 :: CallStaticClassMethodEx()
4. Если мне в моей программе нужны данные из Аксапты, то я напрямую через ADO беру эти данные из базы Аксапты.

То есть основные два момента такие:
1) Если нужно что-то изменить в базе данных Аксапты, то я пишу код в самой Аксапте и вызываю этот код из своей программы через COM-connector и метод CallStaticClassMethodEx().
2) Если нужно что-то прочитать из базы данных Аксапты, то я напрямую соединяюсь к этой базе через ADO.
Старый 22.11.2004, 17:23   #8  
online
Ace of Database
Участник
Аватар для Ace of Database
 
873 / 649 (23) +++++++
Регистрация: 14.10.2004
Для velk - вот пример на VB

PHP код:
Public Sub MyAxaptaSub()
    
Dim ax As New AxaptaCOMConnector.Axapta2
    Dim paramList 
As New AxaptaCOMConnector.AxaptaParameterList
    ax
.Logon2 "UserName""Password""StartupCompany", , , , "Имя Конфигурации В Конфигурационной Утилите"
    
    
paramList.Size 'передаем два папраметра
    paramList.Element(1) = "Сам"
    paramList.Element(2) = "такой"
    ax.CallStaticClassMethodEx "NameOfTheClassInAxapta", "NameOfTheStaticMetod", paramList
    
    ax.Logoff
End Sub 
Старый 22.11.2004, 18:13   #9  
Alex P is offline
Alex P
Участник
 
40 / 10 (1) +
Регистрация: 01.10.2004
Цитата:
Изначально опубликовано Ace of Database
Я в таких случаях стараюсь минимизировать количество объектов Аксапты, используемых в моих программах и поступаю так:

2) Если нужно что-то прочитать из базы данных Аксапты, то я напрямую соединяюсь к этой базе через ADO.
Я сейчас то же озабочен этой проблемой получить данные из Аксапты и связь через АDO мне кажется сомнительной. Ведь зачастую надо получать не просто таблицы, а сложные запросы типа InventOnHand - и что в таком случае - писать sql - запросы, дублирующие Aксаптовские Queries ? А два механизма чтения данных, через ADO и Com Connector держать не хочется. У кого какие мнения или опыт использования ?
Старый 22.11.2004, 18:57   #10  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Странно конечно но нигде не нашел инфу по login2
может кто скажет какие параметры и что означают
Старый 22.11.2004, 23:45   #11  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
руководство разработчика
Axapta Business Connector \ Basics \ Reference Documentation \ IAxapta2 \ IAxapta2::Logon2
Старый 23.11.2004, 10:46   #12  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Может кто поделится руководствами разработчика.....
ОЧЕНЬ НУЖНО...
СПАСИБО
Старый 23.11.2004, 11:55   #13  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
бог ты мой!
в дистрибутиве.
или в каталоге bin.
или возьмите здесь http://technet.navision.com/usered/A...02.00-ENUS.zip
Старый 26.01.2005, 08:24   #14  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
есть ли работающий пример на Delphi?
есть ли работающий пример на Delphi?
Старый 21.06.2005, 10:04   #15  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
?
Получается этот пример работает только для двухзвенки?
А для трехзвенки как использовать?
Помогите пожалуйста!!!!!
Старый 21.06.2005, 10:24   #16  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Изначально опубликовано velk
Получается этот пример работает только для двухзвенки?
Нет. И для трехзвенки тоже.
__________________
С уважением, Вячеслав.
Старый 21.06.2005, 11:10   #17  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
?
Тогда подскажите какие настройки должны быть в Navision Axapta Configuration Utility
если конечно это там что то надо донастраивать....
может Logon необходимо дополнить какимито параметрами???
У меня для двухзвенки все работает прекрасно...
как только перевожу на трехзвенку то возникает ошибка
на строке ax.Logon2 "Admin", "", "", , , , ""
Старый 21.06.2005, 11:37   #18  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Изначально опубликовано velk

на строке ax.Logon2 "Admin", "", "", , , , ""
Какая ошибка? Или лучше так - используйте просто Logon, а не Logon2

Application("webAxapta").Logon "webuser", "" , "", ""
__________________
С уважением, Вячеслав.
Старый 21.06.2005, 12:32   #19  
velk is offline
velk
Участник
 
194 / 10 (1) +
Регистрация: 17.05.2004
Вот мой код
Set Axapta = CreateObject("AxaptaCOMConnector.Axapta")

на этой строке возникает ошибка - Неопознаная ошибка
Axapta.Logon "adminl", "adminpassword", "", ""

Axapta.Logoff
Вложения
Тип файла: img70907-1 (9.2 Кб, 764 просмотров)
Старый 21.06.2005, 15:58   #20  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
Цитата:
Изначально опубликовано velk
"adminpassword"
Вместо adminpassword Аксаптой здесь ожидается serverManager
__________________
С уважением, Вячеслав.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблема с импортом из Excel через COM Romsrs DAX: Программирование 18 10.06.2008 10:34
Работа с Excel через COM и ошибка 0x800A03EC (Range.AutoFilter) gl00mie DAX: Программирование 15 30.03.2007 18:37
Проблема доступа через COM Connector wit DAX: Функционал 0 10.07.2006 12:34
связь с 1С через COM rinugun DAX: Программирование 9 03.12.2004 11:28
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:57.