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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.03.2007, 10:55   #1  
Lelik111 is offline
Lelik111
Участник
 
6 / 10 (1) +
Регистрация: 28.11.2006
:( Как сделать чтобы изменения поля отображались сразу
Делаю через Делфи обращение к аксапте:
Код:
var
      Axapta,
      AxaptaQuery,
      AxaptaDataSource,
      AxaptaQueryRun,
      Buffer,
      MyRecord, CryptedPass: variant;

begin
  Axapta:=CreateOleObject('AxaptaCOMConnector.Axapta2.1');
  Axapta.logon2('Admin','','','','','','C:\База для разработки.axc');

  MyRecord := Axapta.CreateRecord('WebUser');
  MyRecord.InitValue;
  MyRecord.Field('WebLogin') := 'wer';
  MyRecord.Field('UserId') := 'web';
  MyRecord.Field('WebPassword') := Axapta.CallStaticRecordMethod('WebUser','makePassword', 'pass', 'wer');

 //вставка новой записи в таблицу
  MyRecord.Insert;

Axapta.Logoff;
  Axapta:=0;
После MyRecord.Insert; моя программа может прочитать эту строчку из таблицы, а в работающей аксапте она не отображается (переоткрывал таблицу заново).
Отображается только после перезапуска Аксапты. Как мне сделать чтобы все изменения сразу отображались в запущенной Аксапте?
Старый 02.03.2007, 10:59   #2  
Himan is offline
Himan
Участник
Аватар для Himan
 
312 / 12 (1) ++
Регистрация: 07.11.2006
Адрес: Tumen
А перезакрытие формы, не помогает???
__________________
Рабочий день сокращает жизнь на 8 часов
Старый 02.03.2007, 11:00   #3  
Lelik111 is offline
Lelik111
Участник
 
6 / 10 (1) +
Регистрация: 28.11.2006
нет
Старый 02.03.2007, 11:08   #4  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
myTable_ds.research(); должно помочь. Т.е. необходимо обновить источник данных формы

Refresh: Refreshes the screen (current record), without accessing the
database. RefreshEx(int n): To refresh the data according to parameter "n".
ReRead: Re read the current record and updates the screen.
ReSearch: Uses the current query clear the grid, and reread all records.
ExecuteQuery: Builds the query, including resetting user sorting etc, and
uses research to show the result.

If you want to refresh the form with records that were inserted in a method
or job that was called, then you should use research.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 02.03.2007, 11:26   #5  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Вдогонку
Даже и обновив источник данных возможна ситуация, что новая строка будет в конце списка грида, в то время как обновление данных устанавливает первую строку текущей. В таком случае, вы можете и не заметить, что добавилась новая строка. Тогда вам надо спозиционировать курсор на текущую строку. Вообще, посмотрите как это делается в \Forms\AddressFormat\Methods\up

X++:
    if (save)
    {
        addressFormatLines_ds.research();
        addressFormatLines_ds.findRecord(save);
    }
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
За это сообщение автора поблагодарили: demon46 (1).
Старый 02.03.2007, 11:33   #6  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
И ещё вдогонку
Дабы "достучаться" до источника данных формы, необходимо "достучаться" до экземпляра этой открытой формы.
Вот.
Дерзайте
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 02.03.2007, 12:37   #7  
Lelik111 is offline
Lelik111
Участник
 
6 / 10 (1) +
Регистрация: 28.11.2006
что-то я не пойму у чего такой метод "research();"? К чему его цеплять?)
Старый 02.03.2007, 12:50   #8  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
и соответствующего источника данных открытой формы
Старый 02.03.2007, 12:57   #9  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
оххх.....
У вас задача:
Дано: форма, отображающая таблицу, внешний процесс (Дельфи) заносящий строку в таблицу
Надо: отобразить эту новую строку.

Для начала упростите себе задачу. Замените Дельфи на джоб внутри аксапты. Т.е. заносите строку из джоба.

Цитата:
что-то я не пойму у чего такой метод "research();"? К чему его цеплять?)
В вашей форме сделайте кнопочку, по клику которого припишите

WebUser_ds.research();
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 02.03.2007, 12:59   #10  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Когда у вас получится увидеть новую строку в форме, напишите сюда
А я вам расскажу что дальше надо делать
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 02.03.2007, 16:36   #11  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Post
Цитата:
Сообщение от Lelik111 Посмотреть сообщение
После MyRecord.Insert; моя программа может прочитать эту строчку из таблицы, а в работающей аксапте она не отображается (переоткрывал таблицу заново).
Отображается только после перезапуска Аксапты. Как мне сделать чтобы все изменения сразу отображались в запущенной Аксапте?
А как называется таблица, если не секрет? (Какой режим кэширования? [CacheLookup в свойствах таблицы через AOT])

Если закрытие-открытие формы начнет помогать, то Периодическое обновление строк в форме альтернативное решение мгновенного отображения новых записей в форме без выхода из нее.

Последний раз редактировалось DreamCreator; 02.03.2007 в 16:38. Причина: открытие-закрытие
Старый 02.03.2007, 16:50   #12  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Позволю процитировать себя
Цитата:
Дабы "достучаться" до источника данных формы, необходимо "достучаться" до экземпляра этой открытой формы.
Вот здесь проблема будет у человека.

Т.е. необходимо следующее:

1 Открыть форму (на стороне Аксапты)
2 Сохранить переменную formRun, а ещё лучше dataSource этой формы.
3 Заполнить таблицу из внешнего приложения (Lelik111 это уже сделал)
4 прорефрешить источник данных из внешнего приложения используя ранее сохранённую переменную _ds

Вот пункты 2 и 4 самые мутные.
Как указать внешнему приложению конкретный _ds.
На самом деле задача интересная и не совсем стандартная как кажется на первый взгляд.
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 02.03.2007, 17:01   #13  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Да и вообще эта задача должна не программистскими методами решаться
Вот :-)
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 03.03.2007, 12:45   #14  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Post
Цитата:
Сообщение от Lelik111 Посмотреть сообщение
...Как мне сделать чтобы все изменения сразу отображались в запущенной Аксапте?
В двух словах. В Аксапте у таблицы WebUser (в стандарте) свойство CacheLookup установлено в EntrieTable, что значит "кешировать таблицу полностью". Т.е. при первом обращении к таблице ее содержимое кешируется и при повторном обращении, записи возвращабтся не из БД а из кеша.
Вы не сказали как именно вы получаете записи в Аксапте, поэтому опишу все что пришло в голову... раз уж начал отвечать.
Чтобы Вы смогли из Аксапты получить запись таблицы WebUser из БД а не из кеша, можно поступить следующими способами (для Вас, я думаю, актуальным будет пункт 1):
1) Если запись отображается на форме в гриде, то можно нажать F5 (пункт меню "Команда"->"Восстановить") . Текущая запись прочитается из БД и обновится в кеше. Это же действие можно выполнить програмно - см. пункт 2
2) Если запись отображается на форме в гриде, то можно програмно выполнить
X++:
DataSourse.reread(); // чтение ТЕКУЩЕЙ (одной) записи из БД
DataSourse.refresh(); // Обновление контролов на форме
// DataSourse - датасоурс таблицы на форме
3) Можно програмно прочитать запись/записи в Аксапте напрямую из БД, а не из кеша (в данном случае в кеше все-равно останется старые "версии" записей)
X++:
WebUser.disableCache(true);
select from WebUser ...
4) Можно програмно обновить кеш таблицы, для дальнейшей работы с ней любыми способами
X++:
flush WebUser; // в 3-х уровневой конфигурации выполнить на СЕРВЕРЕ
5) или програмно обновить кеш всех таблиц
X++:
new Dictionary().tableFlush(); // в 3-х уровневой конфигурации выполнить на СЕРВЕРЕ
или
X++:
SysFlushDictionary::doFlush(); // в 3-х уровневой конфигурации выполнить на СЕРВЕРЕ
6) или подождать, пока кеш таблицы обновится автоматически... - неудачная идея, но имеет право на существование

P.S. мда... совсем не в двух словах. Lelik111, в будущем постарайтесь более конкретизировать свои вопросы.

Последний раз редактировалось vallys; 03.03.2007 в 17:18.
За это сообщение автора поблагодарили: Russland (1), Silphidae (1).
Старый 03.03.2007, 13:40   #15  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,494 / 1065 (38) ++++++++
Регистрация: 22.07.2003
Адрес: МО
7) или у таблицы WebUser свойство CacheLookup установить в Find
Старый 03.03.2007, 14:50   #16  
Eldar9x is offline
Eldar9x
MCTS
Аватар для Eldar9x
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Регистрация: 29.09.2006
Адрес: Казань
valys, ведь нужно это из Delphi сделать, а не из X++ кода, как Вы предложили...
Старый 03.03.2007, 15:01   #17  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от raz Посмотреть сообщение
7) или у таблицы WebUser свойство CacheLookup установить в Find
действительно... если это конечно не нарушает какую-нибудь существующую концепцию
Цитата:
Сообщение от Eldar9x Посмотреть сообщение
valys, ведь нужно это из Delphi сделать, а не из X++ кода, как Вы предложили...
Ну, во-первых, если и вставлять и считывать записи из Delphi (в рамках одного подключения), то никаких проблем и не возникнет, а во-вторых, по-моему все-таки из Аксапты после вставки записей из Дельфи (т.е. чтение записей в рамках другого подключения)...
Цитата:
Сообщение от Lelik111 Посмотреть сообщение
...После MyRecord.Insert; моя программа может прочитать эту строчку из таблицы, а в работающей аксапте она не отображается (переоткрывал таблицу заново).
Отображается только после перезапуска Аксапты. Как мне сделать чтобы все изменения сразу отображались в запущенной Аксапте?
Старый 03.03.2007, 17:15   #18  
Russland is offline
Russland
MCTS
Аватар для Russland
MCBMSS
 
267 / 116 (4) +++++
Регистрация: 17.10.2005
Адрес: Донеччина, Україна
Вот написал джоб
X++:
static void Job30(Args _args)
{
    Args                args = new Args();
    FormRun             formRun;
    WebUser             table;
    FormObjectSet       ds;

;
    formRun = new MenuFunction(MenuItemDisplayStr(WebUsers), MenuItemType::Display).create(args);

    if (formRun)
    {
        formRun.run(); // Открыли форму
        ds = formRun.dataSource();  // Сохраняем dataSource

        //  Lelik111 сделал -->
        table.WebLogin = "Nnn";
        table.insert();
        //  Lelik111 сделал <--

        //  Обновляем данные -->
        ds.refresh();
        ds.research();
        //  Обновляем данные <--
    }
}
Как видим строка вносится и отображается (по крайней мере у меня). Таки проблема не в кеше.
Проблемы я описал в посте #12
Пост #13 вообще написан под впечатлением следующей умозрительной ситуации: ну открыта на компьютере А пользователем UserA форма WebUsers. А на компьютере В пользователь UserВ тоже открыл эту же форму. Тогда Дельфи должен "разослать" сообщения этим формам (а по-хорошему всем формам, источником данных которых является таблица WebUser) что им (формам) пора обновляться. Или сам обновить эти формы.
Ну так же не делается.
Я бы просил Lelik111 описать свою задачу. Зачем необходимо обновлять формы?
__________________

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Старый 03.03.2007, 17:25   #19  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Регистрация: 18.01.2005
Цитата:
Сообщение от Russland Посмотреть сообщение
...Как видим строка вносится и отображается (по крайней мере у меня). Таки проблема не в кеше...
Вы описали как можно обновить кеш датасоурса. Я описывал как можно обновить кеш таблицы. Можно сказать, что наши советы не пересекаются. Значит автору действительно нужно конкретизировать вопрос
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
LedgerJournalTable как лучше сделать новую форму kitty DAX: Программирование 2 20.02.2008 12:36
Что сделать, чтобы связанные Data Source обновились? Maxim Gorbunov DAX: Программирование 4 11.04.2005 17:40
Сводное планирование - изменения&изменения мин. Alexm DAX: Прочие вопросы 1 05.04.2005 10:43
Глюк : не сохраняются изменения в коде Logger DAX: Администрирование 2 31.01.2005 12:02
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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