Взаимодействие с Аксаптой через 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;
|