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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.11.2007, 01:01   #1  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Как через .NET коннектор удалить записи?
Наш софт общается с Акзаптой через .NET коннектор.
Не совсем напрямую - то есть есть библиотека, предоставляющая доступ почти ко всем методам интерфейса AxaptaRecord, а я уже зову эти методы. Если мне нужно что-то чего нет в библиотеке, эти вызовы добавят.

Нужно по номеру найти SO, затем удалить все его детали.

Спасибо!
Старый 08.11.2007, 14:03   #2  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если имеется в виду, что все это "добро" работает через Axapta ComConnector (Business Connector), то есть несколько вариантов.

1) У объектов интрефейса Axapta ComConnector есть метод Call() который вызывает методы соответствующих объектов. Раз есть ссылка на объект интерфейса IAxaptaRecord, то в его методе Call() надо просто вызвать метод Delete.

Правда, предварительно придется организовать перебор записей через метод ExecuteStmt(). Либо объекта IAxaptaRecord, либо объекта IAxapta

2) В методе IAxapta::ExecuteStmt() можно указывать не только команды select, но и команды delete_from. Т.е. вполне можно одной командой удалить все записи, удовлетворяющие определенному условию.

3) Наконец, можно в самой Axapta сделать статический метод, который будет выполнять нужные действия и вызывать этот метод через IAxapta::CallStaticClassMethod() или IAxapta::CallStaticRecordMethod() в зависимости от того, к чему "прицеплен" статический метод.
Старый 08.11.2007, 16:45   #3  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
.NET и COM коннекторы почти идентичны в плане API, мы ходим через .нет.
Ваш 2) мне нравится больше всего, спасибо!

3) не пройдет потому что это должно работать в любой инсталляции, мы не владеем Акзаптой а пристраиваемся к ней сбоку.

А вот как организовать 1) я не совсем представляю, что, просто найти нужные записи и удалять в цикле пока не вылезет исключение? Вроде метод Found не отражает удаление, хотя я могу и ошибаться?
Старый 08.11.2007, 19:30   #4  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Jab Straight Посмотреть сообщение
А вот как организовать 1) я не совсем представляю, что, просто найти нужные записи и удалять в цикле пока не вылезет исключение? Вроде метод Found не отражает удаление, хотя я могу и ошибаться?
Да это просто аналог такой конструкции

X++:
select salesLine where salesLine.SalesId == salesId;
while (salesLine)
{
	salesLine.delete();
	next salesLine;
}
В терминах коннекторов: через метод IAxapta::ExecuteStmt() получаем объект IAxaptaRecord(). Метод IAxaptaRecord::Found() определяет условие выхода из цикла, а переход к следующей записи выборки осуществляется через метод IAxaptaRecord::next().

Собственно в Help это все подробно описано. Вот несколько подправленный пример из Help

Example (Visual Basic)
PHP код:
Dim Axapta As Object

Dim MyRecord 
As Object

Set Axapta 
CreateObject("AxaptaCOMConnector.Axapta")
Axapta.Logon

‘ create an Axapta record

Set MyRecord 
Axapta.CreateRecord("MyTable")

‘ select a record

MyRecord
.ExecuteStmt "select * from %1 where %1.Name == ‘MyName’"

While MyRecord.Found

  MyRecord
.Call("Delete")

  
‘ get the next record
  MyRecord
.Next

Wend 
Старый 08.11.2007, 22:44   #5  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Еще вопрос: чтобы обновить существующий SO, я нахожу его вызовом метода Find со вторым параметром "истина". А вот сохранять изменения нужно вызовом Save или Update?
Старый 09.11.2007, 11:22   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Я не знаю, что такое метод save(). Видимо, это какой-то специфический метод NET-коннектора. Поэтому могу только дать совет общего плана.

Идея коннекторов заключается в том, что Вы работаете в собственной среде программирования, но так, как будто Вы работаетет в среде Axapta. Можно сказать, что это некий аналог подключения по ADO или ODBC к внешней базе.

Поэтому, если у Вас стоит задача выполнить некую модификацию в Axapta, то и решать эту задачу надо средствами самой Axapta. А потом просто "перевести" этот код в синтаксис коннекторов.

Как бы Вы решали задачу модификации в среде Axapta? Ну, очевидно, как-то так:

X++:
myTab = MyTab::find(myTabId, true);
if (myTab)
{
	myTab.field1 = "Новое значение";
	myTab.update();
}
Значит, именно так и надо решать эту же задачу через коннектор. С поправкой на соответствующие команды и функции.

Example (Visual Basic)

PHP код:
Dim Axapta As Object 

Dim MyRecord 
As Object 

Set Axapta 
CreateObject("AxaptaCOMConnector.Axapta"
Axapta.Logon 

‘ create an Axapta record 

Set MyRecord 
Axapta.CallStaticRecordMethod("MyTable","Find",MyTabId,TRUE

If 
MyRecord.Found Then

‘ set fields of record
  MyRecord
.Field("Field1") = "Новое значение"

‘ update the record
  MyRecord
.Update

End 
If 
Старый 09.11.2007, 18:56   #7  
Jab Straight is offline
Jab Straight
Участник
 
51 / 11 (1) +
Регистрация: 02.01.2007
Как бы я решал это в среде Акзапты - представления не имею и не хочу, я не X++ разработчик, среды у меня нет и не надо.

А за VB код спасибо! Теперь все ясно.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Логин в аксапту через коннектор Eldar9x DAX: Программирование 2 11.09.2008 16:42
Как в форме CustTrans через query отобрать записи у которых AmountCur != 0 ( когда в QueryBuildRange ставишь value(strFmt('!0')); - не работает!) rkorchagin DAX: Программирование 12 02.04.2007 17:58
Не могу залогиниться через .NET connector. axy DAX: Программирование 3 06.12.2006 14:04
Не могу удалить записи из справочника Александр Костоусов DAX: Программирование 2 03.09.2004 17:20
Как при удалении записи из таблицы подавить вывод запроса "Удалить запись?" Anders DAX: Программирование 2 05.05.2004 17:52

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

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

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