04.06.2003, 11:43 | #1 |
Участник
|
COM: Axapta.CallJob
Хочу запускать Job в аксапте в автоматическом режиме и гасить ее после отработки Job'а.
Написал Job - в аксапте все отлично работает. Когда обращаюсь к аксапте через COM и запускаю этот Job - происходит ошибка, вылетает трассировка стека - типа TreeNode object не инициализирован. Думал это метод CallJob такой кривой - нет ведь, доработал класс - добавил статический метод для запуска того-же самого и вызываю его при помощи метода CallStaticClassMethod. Вызывается все нормально, но дальше опять падает. Вот отрывок из метода, в котором происходит падение: void ProcessJobs() { TreeNode treeNode, nodeInLayer, tmpNode, methodNode; int i; ; treeNode = infolog.rootNode(); treeNode = treeNode.AOTfindChild("Jobs"); // <-- Падение происходит здесь!!! Может кто сталкивался с подобной ерундой? ЗЫ: То, что Box::Info не работает - в принципе логично, т.к. пользовательского интерфейса в случае с COM'ом нет (хотя даже в этом случае можно через Win API сообщениями кидаться . |
|
04.06.2003, 16:26 | #2 |
Участник
|
Ндааа.....
Который раз задаю вопрос на форуме - и тишина....
Выходит, что все проблемы, которые обсуждаются на форуме я могу решить и сам, а вот когда реальная проблема - помощи от форума ноль. Жаль, очень жаль. |
|
04.06.2003, 16:45 | #3 |
----------------
|
Хм... видимо, никто такие задачи не делал.. но ответ очевиден
при работе через COM infolog не возвращает rootNode.. ищите другой метод для получения rootNode |
|
05.06.2003, 00:57 | #4 |
Участник
|
Re: Ндааа.....
Цитата:
Изначально опубликовано Fedor
Который раз задаю вопрос на форуме - и тишина.... Выходит, что все проблемы, которые обсуждаются на форуме я могу решить и сам, а вот когда реальная проблема - помощи от форума ноль. С одной стороны, это говорит о вашей квалификации. С другой стороны здесь не обязаны отвечать на вопросы. http://www.axforum.info/forums/showt...stid=13070#2_2 Тем более на сложные. Реальные проблемы эффективнее решать на договороной основе. У вас будут хоть какие то гарантии и рычаги воздействия. Советую также обратить внимание на пункты 2.3 и 2.4. |
|
05.06.2003, 09:14 | #5 |
Участник
|
Я уж было подумал, что кто-то ответит по существу :-)
Сергей, спасибо за напоминание, но я не предъявлял претензий ни к форуму ни к его обитателям.
Просто мысли в слух, извините, что не очень приятные. 2 Wamr: Спасибо за идею, я получил rootNode другим способом - xInfo xInfo = new xInfo(); ; treeNode = xInfo.rootNode(); treeNode = treeNode.AOTfindChild("Jobs"); и это помогло. Но дальше возникла опять неразрешимая проблема: while (treeNode) { for (i = 0; i <= 0xF; i++) { if (bitTest(treeNode.applObjectLayerMask(), 1 << i)) { nodeInLayer = treeNode.getNodeInLayer(i); вот в этом куске при обращении к Аксапта через COM, конструкция treeNode.getNodeInLayer(i) возвращает пустое значение, хотя при запуске данного кода в самой аксапте (с GUI) все отлично работает. И такие ловушки на каждом шагу. При запуске Аксапта через COM почему-то перестают работать многие методы общеупотребимых классов. к примеру Box::Info("Bla-Bla-Bla") выдаст ту же самую трассировку стека с сообщением о том, что объект не инициализирован. вот такие пироги.... может аксапта какая кривая - 2.5 SP5 HF1 |
|
05.06.2003, 14:57 | #6 |
Участник
|
Привет
Мне так кажется нужно смотреть как Аксапта заходит в систему, если учесть что при запуске Аксапты инициализируются глобальные Объекты Аксапты может быть из-этого. Ты можешь напечатать твой код с COM Connectoroм. Кстати есть возможность трассировать вызовы COM Connectora внутри Аксапты может быть тебе это поможет. Извини что ничего конкретного. Просто я не сталкивался с такой задачей. |
|
05.06.2003, 15:36 | #7 |
Участник
|
Код.
Пожалуйста :-)
Вот: procedure TForm1.Button1Click(Sender: TObject); Var Axapta : Taxapta2; begin Axapta := TAxapta2.Create(NIL); Axapta.Logon2('','','cor','ru','','','WORK_DIRECT'); Axapta.CallJob(WideString('CORI01_FillCASnapshot_Job')); Axapta.Logoff(); end; А каким образом можно "трассировать вызовы COM Connectora внутри Аксапты "? Спасибо, Федор. |
|
09.06.2003, 18:10 | #8 |
Участник
|
Извини что долго не отвечал
Трассировка COM конектора, запускаешь Axapta Configuration на закладке Bissnes Connector есть галочка трассировать X++. Я бы смотрел инициализирован ли объект Session. Извини что не помог не сталкивался |
|
09.06.2003, 18:27 | #9 |
Участник
|
Не выходит :-(
Спасибо за ответ, но вот в чем загвоздка - когда я открываю конфигурационную утилиту своей аксапты я не вижу закладки "Bissnes Connector " (только "COM Connector", но на ней нет описанной галочки).
|
|
09.06.2003, 18:29 | #10 |
Участник
|
К прошлому сообщению почему-то не прикрепилась иллюстрация :-/
|
|
09.06.2003, 18:30 | #11 |
Участник
|
У меня Аксапта 3.0 а у тебя какая ?
|
|
10.06.2003, 11:34 | #12 |
Участник
|
Привет,
Трассировка работает только в Аксапте 3.0. Я сделал примерчик по твоему образу и подобию почти, так как работаю в 3.0 static void Job2(Args _args) { int i; Test t; TreeNode treeNode; TreeNodeIterator treeNodeIterator; xInfo xInfo = new xInfo(); ; treeNode = TreeNode::rootNode(); treeNode = treeNode.AOTfindChild( "Jobs" ); treeNodeIterator = treeNode.AOTiterator(); treeNode = treeNodeIterator.next(); while (treeNode) { t.Name = treeNode.treeNodeName(); t.insert(); treeNode = treeNodeIterator.next(); } } Public Sub TEST() Dim Axapta As Object Set Axapta = CreateObject("AxaptaCOMConnector.Axapta") Axapta.Logon Axapta.CallJob "Job2" End Sub Посмотрел потом таблицу TEST , Job ее заполняет, значит все работает |
|
11.06.2003, 13:38 | #13 |
Участник
|
Привет,
Спасибо! Насчет версии аксапты - да, засада. У меня 2.5, кстати, я в предыдущих сообщениях указывал. Насчет кода - тоже указывал, не работает код следующего вида: while (treeNode) { for (i = 0; i <= 0xF; i++) { if (bitTest(treeNode.applObjectLayerMask(), 1 << i)) { nodeInLayer = treeNode.getNodeInLayer(i); // <- Возвращает пустое значение. Твой код у меня тоже работает :-) Федор. |
|
22.01.2007, 14:23 | #14 |
Участник
|
Привет, тоже была проблема, я вызывал функцию infolog.startImport(), которая не отрабатывала. У меня Аксапта 4.0. Для того чтобы нормально работал infolog нужен запущенный клиент Аксапты. Чтобы всетаки использовать infolog.startImport() я сделал Батч-сервер(клиент Аксапты) и написал батч джобу которая запускает инфолог.
обсуждения на форуме: Извне SysImportElements |
|