|
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; |
|