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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.05.2015, 16:27   #1  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
если честно времени на чтение книги нет. Проект срочный . доработки для упрощения кода, будут делаться позже. Есть ли какая то определенная книга, глава, а лучше даже пример, что бы простой junior понял?
Старый 26.05.2015, 16:51   #2  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Данный пример будет работать при условии, что у вас Tmp_DeliverShipProducts_ZTR - название таблицы, привязанной к одноименному источнику данных на вашей форме.

В начале метода объявите новую переменную с типом вашей временной таблицы:
X++:
public void init() 
{
     Tmp_DeliverShipProducts_ZTR      tmp;
     //Дальше идет ваш код
     ....................
Внутри цикла while (myResult.next()) сделайте следующее:
1) в самом начале добавьте строку
X++:
tmp.clear();
2) все упоминания переменной Tmp_DeliverShipProducts_ZTR замените на переменную tmp
3) в конце добавьте строку
X++:
tmp.insert();
После выхода из цикла while (myResult.next()) в конце метода init() добавьте код:
X++:
Tmp_DeliverShipProducts_ZTR.setTmpData(tmp);
Tmp_DeliverShipProducts_ZTR_DS.executeQuery(); //это внутри init() необязательно, но на всякий случай
Обратите внимание, что в последней строке к слову Tmp_DeliverShipProducts_ZTR в самом конце добавлено окончание "_DS" - это обращение к источнику данных таблицы.

Последний раз редактировалось Ace of Database; 26.05.2015 в 17:08.
Старый 26.05.2015, 16:59   #3  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
выдает ошибку "[Microsoft][SQL Native Client]Invalid cursor state" когда пытается выполнить while (myResult.next())
а так же ругается на
X++:
Tmp_DeliverShipProducts_ZTR_DS.setTmpData(tmp);
Старый 26.05.2015, 17:05   #4  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Перепутал, надо написать
X++:
Tmp_DeliverShipProducts_ZTR.setTmpData(tmp);
Tmp_DeliverShipProducts_ZTR_DS.executeQuery();
То есть в первом случае надо без окончания _DS.
Старый 26.05.2015, 17:12   #5  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Самый тупой вариант в вашем случае, это сделать временную таблицу в Аксапте постоянной.
Свойство SaveDataPerCompany выставить в No.
Написать на SQL хранимую процедуру, которая ее очищает и заполняет заново. А потом из Аксапты просто открыть форму, и она безо всякого кода вам отобразит данные.
При этом надо позаботиться заполнением поля RecId уникальными значениями из хранимой процедуры.
За это сообщение автора поблагодарили: Emka (1).
Старый 26.05.2015, 17:16   #6  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
теперь на функцию не ругается)

Думала о таком варианте, но такое у нас под запретом))
Старый 27.05.2015, 10:13   #7  
macklakov is offline
macklakov
NavAx
Аватар для macklakov
 
2,344 / 996 (38) +++++++
Регистрация: 03.04.2002
Цитата:
Сообщение от Ace of Database Посмотреть сообщение
Самый тупой вариант в вашем случае, это сделать временную таблицу в Аксапте постоянной.
Свойство SaveDataPerCompany выставить в No.
Написать на SQL хранимую процедуру, которая ее очищает и заполняет заново. А потом из Аксапты просто открыть форму, и она безо всякого кода вам отобразит данные.
При этом надо позаботиться заполнением поля RecId уникальными значениями из хранимой процедуры.
Страшный ты человек! А что если в это время другой пользователь форму открыть попробует? Или кто-то попытается права доступа настроить?
__________________
Isn't it nice when things just work?
Старый 27.05.2015, 16:18   #8  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Цитата:
Сообщение от macklakov Посмотреть сообщение
Страшный ты человек! А что если в это время другой пользователь форму открыть попробует? Или кто-то попытается права доступа настроить?
Если в хранимой процедуре все сделать внутри транзакции, то оба пользователя увидят одни и те же данные.
А права доступа - это конечно да. Хранимая процедура вернет данные независимо от прав. Но я в этой ветке занял сторону конкретного человека. Как бы адвокат. Что делать девушке: отказываться от задания или выполнить любой ценой? Жизнь сложная штука.

PS. И в то же время я понимаю, что наличие таких специалистов снижает стоимость позиции "специалист по Аксапте". Жизнь сложная штука. Так как девушка худо-бедно решит проблему подручными средствами, то проект не получит профессионал. Зритель поневоле встает на сторону главного героя фильма. Девушка - главный герой этой темы. А если бы тему начал другой человек, с вопросом: "допускать ли таких специалистов к этому заданию"? То я бы встал на его сторону, так как он был бы главным героем. И я бы не стал тогда защищать девушку. Это вопрос психологии.

Последний раз редактировалось Ace of Database; 27.05.2015 в 16:28.
Старый 26.05.2015, 17:53   #9  
Napalm is offline
Napalm
Участник
 
80 / 88 (3) ++++
Регистрация: 23.05.2012
Цитата:
Сообщение от Emka Посмотреть сообщение
выдает ошибку "[Microsoft][SQL Native Client]Invalid cursor state" когда пытается выполнить while (myResult.next())
С временной таблицей вроде бы не связано. А где код метода "callSqlOnServer_ZTR"? Возможно проблема в нем.

PS: Код можно смело перенести в тему "The daily Axapta WTF".
Старый 26.05.2015, 19:18   #10  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Цитата:
Сообщение от Napalm Посмотреть сообщение
С временной таблицей вроде бы не связано. А где код метода "callSqlOnServer_ZTR"? Возможно проблема в нем.
X++:
server static ResultSet callSqlOnServer_ZTR(Statement _stmt, str _sql, boolean _update = true)
{
    ResultSet   rs = null;
    ;
    new SqlStatementExecutePermission(_sql).assert();

    if (_update)
        _stmt.executeUpdate(_sql);
    else
        rs = _stmt.executeQuery(_sql);

    CodeAccessPermission::revertAssert();
    return rs;
}
Старый 27.05.2015, 09:18   #11  
makbeth is offline
makbeth
Участник
Аватар для makbeth
КОРУС Консалтинг
 
43 / 52 (2) ++++
Регистрация: 15.05.2007
Адрес: Санкт-Петербург
callSqlOnServer_ZTR прекрасен. Особенно если учесть, что _stmt создан на форме.
Старый 27.05.2015, 11:38   #12  
Emka is offline
Emka
Участник
 
40 / 12 (1) ++
Регистрация: 06.05.2015
Цитата:
Сообщение от Napalm Посмотреть сообщение
С временной таблицей вроде бы не связано. А где код метода "callSqlOnServer_ZTR"? Возможно проблема в нем.
Ошибка оказалась в самом SQL - клиенту возвращалось несколько результатов
Решила по средствам SET NOCOUNT
За это сообщение автора поблагодарили: Ace of Database (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Отмена использования временной таблицы в FormDatasource A_BAS DAX: Программирование 4 02.03.2013 21:11
передача временной таблицы с клиента на сервер Eldar9x DAX: Программирование 30 27.07.2012 12:05
Join временной таблицы в запросе yahenz DAX: Программирование 12 24.04.2012 14:59
Display метод временной таблицы выполняется в компании DAT S.Kuskov DAX: Программирование 4 15.04.2011 20:11
Динамическое связывание временной таблицы Paul_ST DAX: Программирование 8 25.09.2007 16:17
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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