|
08.11.2007, 01:01 | #1 |
Участник
|
Как через .NET коннектор удалить записи?
Наш софт общается с Акзаптой через .NET коннектор.
Не совсем напрямую - то есть есть библиотека, предоставляющая доступ почти ко всем методам интерфейса AxaptaRecord, а я уже зову эти методы. Если мне нужно что-то чего нет в библиотеке, эти вызовы добавят. Нужно по номеру найти SO, затем удалить все его детали. Спасибо! |
|
08.11.2007, 14:03 | #2 |
Участник
|
Если имеется в виду, что все это "добро" работает через 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 |
Участник
|
.NET и COM коннекторы почти идентичны в плане API, мы ходим через .нет.
Ваш 2) мне нравится больше всего, спасибо! 3) не пройдет потому что это должно работать в любой инсталляции, мы не владеем Акзаптой а пристраиваемся к ней сбоку. А вот как организовать 1) я не совсем представляю, что, просто найти нужные записи и удалять в цикле пока не вылезет исключение? Вроде метод Found не отражает удаление, хотя я могу и ошибаться? |
|
08.11.2007, 19:30 | #4 |
Участник
|
Цитата:
X++: select salesLine where salesLine.SalesId == salesId; while (salesLine) { salesLine.delete(); next salesLine; } Собственно в Help это все подробно описано. Вот несколько подправленный пример из Help Example (Visual Basic) PHP код:
|
|
08.11.2007, 22:44 | #5 |
Участник
|
Еще вопрос: чтобы обновить существующий SO, я нахожу его вызовом метода Find со вторым параметром "истина". А вот сохранять изменения нужно вызовом Save или Update?
|
|
09.11.2007, 11:22 | #6 |
Участник
|
Я не знаю, что такое метод save(). Видимо, это какой-то специфический метод NET-коннектора. Поэтому могу только дать совет общего плана.
Идея коннекторов заключается в том, что Вы работаете в собственной среде программирования, но так, как будто Вы работаетет в среде Axapta. Можно сказать, что это некий аналог подключения по ADO или ODBC к внешней базе. Поэтому, если у Вас стоит задача выполнить некую модификацию в Axapta, то и решать эту задачу надо средствами самой Axapta. А потом просто "перевести" этот код в синтаксис коннекторов. Как бы Вы решали задачу модификации в среде Axapta? Ну, очевидно, как-то так: X++: myTab = MyTab::find(myTabId, true); if (myTab) { myTab.field1 = "Новое значение"; myTab.update(); } Example (Visual Basic) PHP код:
|
|
09.11.2007, 18:56 | #7 |
Участник
|
Как бы я решал это в среде Акзапты - представления не имею и не хочу, я не X++ разработчик, среды у меня нет и не надо.
А за VB код спасибо! Теперь все ясно. |
|
|
|