10.09.2007, 13:22 | #21 |
Member
|
rusalaudinov, посмотрите функциональность Data Crawler. Я не уверен, но мне кажется, что вы спрашиваете про что-то подобное.
Там есть форма, которая позволяет запустить на АОСе функциональность индексирования таблиц (в 3.0 для поиска на портале, в 4.0 — для глобального поиска в GUI). При этом клиент продолжает работать, вы можете делать в нем что угодно (см. класс SysDataSearchDaemon). Есть возможность остановить фоновую задачу на АОСе (похоже, через таблицу идет коммуникация). В 3.0 в двухзвенке это не работало (запускалось на клиенте, не в отдельном потоке). Работает только в тонком (трехзвенном) клиенте. Это на всякий случай.
__________________
С уважением, glibs® |
|
10.09.2007, 13:29 | #22 |
Участник
|
glibs, я пытался давно работать в двухзвенке - ничего не получилось - остальное собрано с аксфорума
rusalaudinov, можно еще использовать таймер (см форму поиска по АОТу, База знаний ERP : Axapta / Таймер Без Формы ) |
|
11.09.2007, 06:37 | #23 |
Участник
|
я щас спрошу, и потом пойду в поиск. может пока ищу вы уже и ответите. короче у меня есть hWnd, который я передал в класс. как по нему получить форму, чтобы можно было обратиться к методу формы?
|
|
11.09.2007, 07:32 | #24 |
Участник
|
по ходу не умею я пользоваться поиском
|
|
11.09.2007, 07:52 | #25 |
Участник
|
Как вообще передать в класс объект формы. В частности нужно передать дерево
|
|
11.09.2007, 08:25 | #26 |
Участник
|
Вы в Thread хотите передать?
__________________
Axapta v.3.0 sp5 kr2 |
|
11.09.2007, 08:37 | #27 |
Участник
|
да. в поток
|
|
12.09.2007, 05:23 | #28 |
Участник
|
эээ...ХЕЛП
|
|
12.09.2007, 12:13 | #29 |
Участник
|
Кажется, в стандартной оборотно-сальдовой ведомости (RLedgerSheetReport, метод fetchRowIntoBuff_Next) так и делается - вычитывается только та часть, которая отображается. Можно глянуть как сделано, но там контрол другой, может и не подойдёт та логика.
__________________
Умные тоже наступают на грабли, но только для того, чтобы поднять их с земли не нагибаясь. |
|
13.09.2007, 05:00 | #30 |
Участник
|
В общем сейчас попробую точно обрисовать что мне нужно, а то мне кажется именно поэтому я не получаю ответа.
у нас есть форма, в которой есть дерево. Создан новый класс, в котором создан поток. Задача передать дерево в поток, чтобы оно загружалось там и не мешало работе формы. я научился передавать в поток hWnd окна. Далее зная его и к какой форме он относится я смогу вызвать метод, который вернет мне дерево. Ключевым моментом в этой задаче является:"Можно ли, и если можно, то как по hWnd окна найти саму форму, чтобы обратиться к ней из потока?" |
|
13.09.2007, 10:09 | #31 |
Участник
|
Цитата:
hWnd - это просто хэндл окна. К форме он отношения никакого не имеет. Но можно хранить Map ссылок (HWND -> FormRun), и потом получить его по хвнд. |
|
13.09.2007, 10:21 | #32 |
Участник
|
Я думаю, стоит попробовать организовать некоторую очередь в гуи потоке, которую сканировать по таймеру и модифицировать тривью по командам из жтой очереди. Правда, не знаю, чо надо сделать, чтоб туда из другого потока запихивать.
Насколько я знаю, практически везде гуи классы не поддерживают многопоточность (поправьте, если не так) И странно ожидать этого от аксапты. |
|
13.09.2007, 12:51 | #33 |
Участник
|
эээ...щас побеседовал с коллегой примерно 50% вещей встали на свои места в голове.
kashperuk, а как нам тогда можно Map передать в поток? Собственно проблема в том, что в поток можно передать только простые типа данных, потому мы и стали заморачиваться с hWnd. А вот именно как передать, либо найти, увидеть из потока этот Map? Или может есть простые способы передать дерево в поток, да я не знаю? |
|
13.09.2007, 12:57 | #34 |
Участник
|
Вот здесь Визульное сравнение различных алгоритмов сортировки есть пример обновления из трида данных на форме.
На четверке не проверял, но на тройке (в том числе SP5+KR2) все это хозяйство работает не очень устойчиво
__________________
Axapta v.3.0 sp5 kr2 |
|
13.09.2007, 16:14 | #35 |
Member
|
А нельзя вашу задачу решить как-то по-другому? Например, рассчитать что-то в классе, и потом заполнить элемент управления в форме.
__________________
С уважением, glibs® |
|
17.09.2007, 06:15 | #36 |
Участник
|
я не могу рассчитать в классе. проблема у меня в том, что когда раскрываешь узел типа Classes проходит много секунд пока он подгружается. нужно это устранить. можно было бы все(что критично долго грузится) загрузать в самом начале, но тогда форма будет висеть пока загрузится всё-че надо. поэтому пришло в голову прогружать дерево в отдельном потоке, а форма тем временем будет в отличном состоянии и готова к работе в любую секунду
|
|
17.09.2007, 10:21 | #37 |
Участник
|
подгружай по таймеру можно посмотреть как ищет поиск по АОТу или как в sidax устроена фоновая загрузка главного меню.
|
|
21.09.2007, 01:17 | #38 |
Member
|
А обязательно вашу задачу решать через форму?
Например, такой джобик закеширует объекты АОТа из узла классов. #AOT static void glibs() { TreeNode treeNode; TreeNodeIterator treeNodeIterator; ; treeNode = TreeNode::findNode(#ClassesPath); treeNodeIterator = treeNode.AOTiterator(); treeNode = treeNodeIterator.next(); while (treeNode) { treeNode.AOTload(); treeNode = treeNodeIterator.next(); } } Для других узлов его переделать несложно. Только он память жрет прилично. Возможно, вам будет достаточно прогнать его без вызова treeNode.AOTload(). Я вот что заметил. После запуска джоба, остановки клиента и АОСа и последующего их запуска узел АОТа открывается быстро. Посему я не уверен, но, возможно, при открытии узла АОТа анализируется не кэш АОСа, а читается какой-нибудь axapd.aoi (или что-то в этом роде) с диска. А после перезапуска АОСа файлы приложения живут в файловом кэше, и поэтому узел уже быстро открывается. Иначе пока я не знаю, как объяснить этот эффект. Но джоб и в этом случае должен обеспечить кэширование файлов приложения. Попробую проверить завтра. А то м.б. джоб нужно запускать время от времени в процессе работы, т.к. файловый кэш имеет свойство освобождаться. А вообще, по-моему, надуманная проблема насчет того, что узел открывается неприемлемо долго. Это один раз происходит. После перезапуска сервера. И не так уж долго и терпеть приходится.
__________________
С уважением, glibs® |
|
21.09.2007, 12:24 | #39 |
Member
|
Проверил. На свеже загруженной машине запустил АОС, запустил клиента, запустил джоб аккуратно (без treeNode.AOTload()). В результате классы открылись очень быстро. Попробовал открыть таблицы — тормозили. Так что вот.
Гипотезу насчет файлового кэша м.б. тоже проверю как-нибудь.
__________________
С уважением, glibs® |
|
26.09.2007, 14:58 | #40 |
Участник
|
уффф... В общем так. Нашел файлы, которые создает аксапта при закрывании её, о которых в начале этой ветки вел речь Mazzy. оказывается, что у меня на четвертой аксапте расширение у этих файлов не aoc a auc. ладно. создал файлик в котором загружено все, что надо, сохранил. переименовал как master.auc и куда я только его не пихал в надежде что аксапта считает его и будет быстро загружать мои узлы дерева, ничего не вышло, аксапта не загружала и не читала. У кого есть идеи куда еще его подпихнуть и как назвать. чтоб сразу загрузился кеш...WELCOME
Дальше коллега подсказал мне попробовать воспользоваться GlobalCache. сегодня весь день им "пользовался". в итоге мне удалось передать дерево в класс, там его раскрыть и потом открывать быстро уже на форме, НО сростить это все с работой в потоке неполучилось. в итоге без потока оно всё работает, как только вызываем метод в отдельном потоке в инфолог уже не получает дерево и все усилия напрасны.....ЧЕРТ |
|
Теги |
aoc, aot, как правильно, кэширование, тормоза |
|
|