|  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 | 
|  |