AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 02.03.2007, 10:55   #1  
Lelik111 is offline
Lelik111
Участник
 
6 / 10 (1) +
Join Date: 28.11.2006
:( Как сделать чтобы изменения поля отображались сразу
Делаю через Делфи обращение к аксапте:
Code:
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; моя программа может прочитать эту строчку из таблицы, а в работающей аксапте она не отображается (переоткрывал таблицу заново).
Отображается только после перезапуска Аксапты. Как мне сделать чтобы все изменения сразу отображались в запущенной Аксапте?
Old 02.03.2007, 10:59   #2  
Himan is offline
Himan
Участник
Himan's Avatar
 
312 / 12 (1) ++
Join Date: 07.11.2006
Location: Tumen
А перезакрытие формы, не помогает???
__________________
Рабочий день сокращает жизнь на 8 часов
Old 02.03.2007, 11:00   #3  
Lelik111 is offline
Lelik111
Участник
 
6 / 10 (1) +
Join Date: 28.11.2006
нет
Old 02.03.2007, 11:08   #4  
Russland is offline
Russland
MCTS
Russland's Avatar
MCBMSS
 
267 / 116 (4) +++++
Join Date: 17.10.2005
Location: Донеччина, Україна
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.
__________________

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

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

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
This post has been rated by: demon46 (1).
Old 02.03.2007, 11:33   #6  
Russland is offline
Russland
MCTS
Russland's Avatar
MCBMSS
 
267 / 116 (4) +++++
Join Date: 17.10.2005
Location: Донеччина, Україна
И ещё вдогонку
Дабы "достучаться" до источника данных формы, необходимо "достучаться" до экземпляра этой открытой формы.
Вот.
Дерзайте
__________________

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

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

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

WebUser_ds.research();
__________________

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

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

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

Last edited by DreamCreator; 02.03.2007 at 16:38. Reason: открытие-закрытие
Old 02.03.2007, 16:50   #12  
Russland is offline
Russland
MCTS
Russland's Avatar
MCBMSS
 
267 / 116 (4) +++++
Join Date: 17.10.2005
Location: Донеччина, Україна
Позволю процитировать себя
Quote:
Дабы "достучаться" до источника данных формы, необходимо "достучаться" до экземпляра этой открытой формы.
Вот здесь проблема будет у человека.

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

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

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

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

В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню
Old 03.03.2007, 12:45   #14  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Join Date: 18.01.2005
Post
Quote:
Originally Posted by Lelik111 View Post
...Как мне сделать чтобы все изменения сразу отображались в запущенной Аксапте?
В двух словах. В Аксапте у таблицы 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, в будущем постарайтесь более конкретизировать свои вопросы.

Last edited by vallys; 03.03.2007 at 17:18.
This post has been rated by: Russland (1), Silphidae (1).
Old 03.03.2007, 13:40   #15  
raz is offline
raz
NavAx
raz's Avatar
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,500 / 1098 (40) ++++++++
Join Date: 22.07.2003
Location: МО
7) или у таблицы WebUser свойство CacheLookup установить в Find
Old 03.03.2007, 14:50   #16  
Eldar9x is offline
Eldar9x
MCTS
Eldar9x's Avatar
Oracle
MCBMSS
 
1,064 / 166 (8) ++++++
Join Date: 29.09.2006
Location: Казань
valys, ведь нужно это из Delphi сделать, а не из X++ кода, как Вы предложили...
Old 03.03.2007, 15:01   #17  
vallys is offline
vallys
Developer
 
146 / 108 (0) +++++
Join Date: 18.01.2005
Quote:
Originally Posted by raz View Post
7) или у таблицы WebUser свойство CacheLookup установить в Find
действительно... если это конечно не нарушает какую-нибудь существующую концепцию
Quote:
Originally Posted by Eldar9x View Post
valys, ведь нужно это из Delphi сделать, а не из X++ кода, как Вы предложили...
Ну, во-первых, если и вставлять и считывать записи из Delphi (в рамках одного подключения), то никаких проблем и не возникнет, а во-вторых, по-моему все-таки из Аксапты после вставки записей из Дельфи (т.е. чтение записей в рамках другого подключения)...
Quote:
Originally Posted by Lelik111 View Post
...После MyRecord.Insert; моя программа может прочитать эту строчку из таблицы, а в работающей аксапте она не отображается (переоткрывал таблицу заново).
Отображается только после перезапуска Аксапты. Как мне сделать чтобы все изменения сразу отображались в запущенной Аксапте?
Old 03.03.2007, 17:15   #18  
Russland is offline
Russland
MCTS
Russland's Avatar
MCBMSS
 
267 / 116 (4) +++++
Join Date: 17.10.2005
Location: Донеччина, Україна
Вот написал джоб
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 описать свою задачу. Зачем необходимо обновлять формы?
__________________

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

Similar Threads
Thread Thread Starter Forum Replies Last Post
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

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 01:49.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.