![]() |
#1 |
Участник
|
![]()
Версия AX 4.0
появилась необходимость использовать .NET Business Connector for Dynamics AX Использовать простой select не вариант. так как должен быть метод (в AX) который принимает SID пользователя и выдает таблицу. И появился следующий вопрос, возможно ли передать из AX уже сформированную таблицу (dataset) или что то наподобие, что б в C# можно было принять набор данных, а не единичную запись. Подскажите где почитать или посмотреть пример. Последний раз редактировалось Deza; 26.12.2011 в 11:36. |
|
![]() |
#2 |
Участник
|
|
|
![]() |
#3 |
Участник
|
Я знаю только способ с построчным перебором через axRecord.Next()
http://msdn.microsoft.com/en-us/libr...(v=AX.10).aspx Если принципиально перебор требуется оставить на стороне аксапты и в Net отправлять уже все строки скопом, то тогда наверное (гипотетически) можно пробовать формировать структуру ADO или даже XML средствами аксапты и затем уже её пресылать Последний раз редактировалось S.Kuskov; 26.12.2011 в 11:35. |
|
![]() |
#4 |
Ищущий знания...
|
В AX2009 в справке разработчика работе с .Net Business Connector посвящен целый раздел.
Конечно там все на английском, но думаю при желании необходимую инфу можно от туда выцепить.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#5 |
Участник
|
jonny, S.Kuskov
проще тогда уже на прямую с Сиклом работать, хотелось бы, что б вся выборка делалась в Аксапте, а она уже возвращала готовый набор данных |
|
![]() |
#6 |
Участник
|
|
|
![]() |
#7 |
Ищущий знания...
|
Цитата:
Сообщение от Deza
![]() появилась необходимость использовать .NET Business Connector for Dynamics AX
Использовать простой select не вариант. так как должен быть метод (в AX) который принимает SID пользователя и выдает таблицу. И появился следующий вопрос, возможно ли передать из AX уже сформированную таблицу (dataset) или что то наподобие, что б в C# можно было принять набор данных, а не единичную запись. Подскажите где почитать или посмотреть пример. 1. Создал бы отдельно новую базу (если такой нету) с нужной табличкой для внешнего приложения. 2. В аксапте написал бы класс по заполнению этой таблицы нужной информацией. По результатам работы класс возвращал бы значения true или false, в зависимости от успешности выполнения. 3. Во внешнем приложении вызывал бы аксаптовский класс, и если он вернул true, то спокойно уже использовал заполненную табличку (о которой написал в 1-м пункте) для своих нужд.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#8 |
Участник
|
Цитата:
Сообщение от lev
![]() Если немного отвлечься от работы .NET Business Connector, и поговорить о решении задачи, я пошел бы немного другим путем.
1. Создал бы отдельно новую базу (если такой нету) с нужной табличкой для внешнего приложения. 2. В аксапте написал бы класс по заполнению этой таблицы нужной информацией. По результатам работы класс возвращал бы значения true или false, в зависимости от успешности выполнения. 3. Во внешнем приложении вызывал бы аксаптовский класс, и если он вернул true, то спокойно уже использовал заполненную табличку (о которой написал в 1-м пункте) для своих нужд. ![]() |
|
![]() |
#9 |
Участник
|
Зачем еще одна база? Сделайте отдельную табличку в аксе, одним из полей которой будет GUID. Из C# вызывайте статический метод, который будет возвращать таблицу, в качестве одного из параметров будет принимать GUID. Возвращенную из аксы табличку загоняйте в DataSet. После обработки данных вызывайте delete с передачей ему GUID`а, это если вам больше не нужны данные в этой таблице.
|
|
![]() |
#10 |
Участник
|
Изначально для чего вам эти данные? Отчет?
|
|
![]() |
#11 |
Ищущий знания...
|
Цитата:
Сообщение от greench
![]() Зачем еще одна база? Сделайте отдельную табличку в аксе, одним из полей которой будет GUID. Из C# вызывайте статический метод, который будет возвращать таблицу, в качестве одного из параметров будет принимать GUID. Возвращенную из аксы табличку загоняйте в DataSet. После обработки данных вызывайте delete с передачей ему GUID`а, это если вам больше не нужны данные в этой таблице.
![]() ![]()
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#12 |
Ищущий знания...
|
Цитата:
Цитата:
Сообщение от greench
Зачем еще одна база? Сделайте отдельную табличку в аксе, одним из полей которой будет GUID. Из C# вызывайте статический метод, который будет возвращать таблицу, в качестве одного из параметров будет принимать GUID. Возвращенную из аксы табличку загоняйте в DataSet. После обработки данных вызывайте delete с передачей ему GUID`а, это если вам больше не нужны данные в этой таблице.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#13 |
Участник
|
По сути, создание AxRecord - это и есть создание (конструирование) выборки. Т.е. здесь будут учтены все нюансы бизнесс-логики (права, RLS, configurationKey), которые были бы недоступны при использовании прямого запроса SQL. Для работы с описанной выборкой используется курсор. BusinessConnector умеет передавать упраление таким курсор внешнему приложению.
|
|
![]() |
#14 |
Участник
|
Не хватает количество лицензий для работы с аксаптой, для просмотра данных и формирования отчетов было решено использовать NET Business Connector,
Планируется работа так, есть сервис который держит одно лицензионное соединение, и пользователи работают через этот отделенный сервис, это глобально(встроенный веб портал не подходит). Локально: 1. вызвать метод с АХ передать ему доменный SID пользователя - решено 2. в АХ обработать сид с учетом настроек безопастности - решено 3. Вернуть в C# результат выборки, по сути таблица и в C# ее принять - поиск решения ![]() |
|
![]() |
#15 |
Участник
|
Цитата:
Сообщение от S.Kuskov
![]() По сути, создание AxRecord - это и есть создание (конструирование) выборки. Т.е. здесь будут учтены все нюансы бизнесс-логики (права, RLS, configurationKey), которые были бы недоступны при использовании прямого запроса SQL. Для работы с описанной выборкой используется курсор. BusinessConnector умеет передавать упраление таким курсор внешнему приложению.
|
|
![]() |
#16 |
Участник
|
Вот как-то так можно:
X++: DataTable table = new DataTable(); IDictionary<string, object> myRange = new Dictionary<string, object>(); table = AxQuery.ExecuteQuery("SELECT * FROM table1", myRange); |
|
![]() |
#17 |
Ищущий знания...
|
Не знаю применимо это в Вашей ситуации или нет... Но все равно, думаю информация лишней не бывает
![]() З.Ы. Может кто сведущий расскажет про класс AxaptaBuffer из пространства имен Microsoft.Dynamics.BusinessConnectorNet, а то поссылке как то скудно написано...
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
![]() |
#18 |
Участник
|
X++: AxaptaWrapper axSession = SessionManager.GetSession(); DataTable dtQueryBind = new DataTable(); Guid guid = System.Guid.NewGuid(); //Fills in temporary storage in AX with data that is used by query axSession.CallStaticClassMethod("HelpClass", "fillTable", new object[] {_fromDate, _toDate, guid }); |
|
![]() |
#19 |
Участник
|
Цитата:
Вот рабочий пример использования Microsoft.Dynamics.BusinessConnectorNet.AxaptaBuffer: X++: static container testImage() { Image Image = new Image(); FilePath filename = @"c:\Users\Public\Pictures\Sample Pictures\Tulips.jpg"; ; if (!Image::canLoad(filename)) throw error::wrongUseOfFunction(funcname()); Image.loadImage(filename); return Image.getData(); } Код: Object obj; Microsoft.Dynamics.BusinessConnectorNet.AxaptaContainer axc; Microsoft.Dynamics.BusinessConnectorNet.AxaptaBuffer axb; byte[] byteArray; System.IO.MemoryStream ms; System.Drawing.Image testImage; obj = DynAx.CallStaticClassMethod("testAxaptaBuffer", "testImage"); axc = (Microsoft.Dynamics.BusinessConnectorNet.AxaptaContainer)obj; axb = (Microsoft.Dynamics.BusinessConnectorNet.AxaptaBuffer)axc.get_Item(1); byteArray = axb.GetData(); ms = new System.IO.MemoryStream(byteArray); testImage = System.Drawing.Image.FromStream(ms); testImage.Save(@"c:\Users\Public\Pictures\Sample Pictures\Tulips2.jpg"); Последний раз редактировалось S.Kuskov; 26.12.2011 в 12:50. |
|
|
За это сообщение автора поблагодарили: lev (5). |
![]() |
#20 |
Участник
|
Цитата:
Сообщение от greench
![]() X++: AxaptaWrapper axSession = SessionManager.GetSession(); DataTable dtQueryBind = new DataTable(); Guid guid = System.Guid.NewGuid(); //Fills in temporary storage in AX with data that is used by query axSession.CallStaticClassMethod("HelpClass", "fillTable", new object[] {_fromDate, _toDate, guid }); ![]() |
|
Теги |
business connector |
|
|