Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Visio и .NET

18K
08 июня 2006 года
RcT
5 / / 08.06.2006
Может быть не здесь вопрос задаю, не силен в теме.
Имеется приложение написанное на Java, у него имеется интерфейс с MS Visio. Работает через .NET, как я понял так как для корректной работы этого интерфейса требуется установленный .NET. Принцип работы примерно такой: в приложении имеются объекты и связи между этими объектами. У объектов имеются свойства четырех типов (Choice, Date, Numeric, Text). Выбрав один или несколько объектов в меню выбираем пункт "Создать диаграмму". Открывается Visio в который загружается нужный stencil и создается диаграмма из этих объектов. Проблема: диаграмма не создается, visio пишет сообщение об ошибке, смотрите лог. Лог вот такой
 
Код:
08.06.2006 12:38:38
Microsoft Visio


An exception occurred.
   at Microsoft.Office.Interop.Visio.CellClass.set_Formula(String lpbstrRet)
   at TcRVisioAddin.TcRDiagram.addActionToPageSheet(Page visioPage)
   at TcRVisioAddin.TcRDiagram.generateShapes(TcRVisioObject diagram_obj, Hashtable referenced_objs)
   at TcRVisioAddin.TcRDiagram.createDiagram(TcRVisioXMLParser parser_obj)

в чем может быть проблема? У меня смутное подозрение что это из-за чего-то типа разные разделители целой и дробной части в проге и в Visio и т.п.
273
10 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
Начнём с того, что приложение написано не на Java, а на J# (интерпретацией Java от мелкомягких для .NET). Судя по трассировке стэка, приведённого тобой, ошибка вылетает на Microsoft.Office.Interop.Visio.CellClass.set_Formula, а потом летит всё остальное. Не мог бы ты привести кусок кода, в котором ошибка вылетает?
18K
13 июня 2006 года
RcT
5 / / 08.06.2006
Не, само приложение написано на Java, а вот интерфейс с Visio наверно написан на J#. Приложение написано не мной, поэтому код привести не смогу. А нельзя ли в .NET посмотреть как-нибудь более полный лог о том что там происходит и где возникает ошибка.
Из лога приведенного выше видно что ошибка возникает не в интерфесном аддоне (TcrVisioAddin), а уже в самом Visio.
273
13 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=RcT]Не, само приложение написано на Java, а вот интерфейс с Visio наверно написан на J#. Приложение написано не мной, поэтому код привести не смогу. А нельзя ли в .NET посмотреть как-нибудь более полный лог о том что там происходит и где возникает ошибка.
Из лога приведенного выше видно что ошибка возникает не в интерфесном аддоне (TcrVisioAddin), а уже в самом Visio.[/quote]
Не может быть! Java приложения не могут использовать .NET компоненты, как и обратно тоже - у них разные производители, среды выполнения (Java - JVM, .NET - CLR). Даже если засунуть исходник от Java в J#, то в 90% вероятности он не скомпиллируется.
18K
13 июня 2006 года
RcT
5 / / 08.06.2006
Ну как же. Все приложение работает из под Tamcat. В браузере пишем http://servername:8000/tcr - запускается стартовая страница со ссылками. Щекаем Lanch Application, запускается jsp страница из которой запускается апплет который запускает jar файл - основное окно программы. Пы ссылке Install Office-live Interface only запускается jsp страница установки интерфейса. Вот отрывок из jsp файла
[HTML]<!-- classid 8AD9C840-044E-11D1-B3E9-00805F499D93 provides dynamic version support, don't change -->
<OBJECT id="setup_applet"
classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
codebase="./installs/j2re-1_4_2-windows-i586.exe#Version=1,4,2,0"
width="<%= width %>" height="<%= height %>" align="baseline">
<PARAM name="code" value="com.edsplm.tc.req.client.install.InterfaceSetupApplet.class">
<PARAM name="codebase" value="./">
<PARAM name="archive" value="tcrInstall.jar,jsse.jar,jnet.jar,jcert.jar,registry.jar">
<PARAM name="type" value="application/x-java-applet;version=1.4">
<!-- Start TcR Parameters -->
<PARAM name="current_version" value="<%=version%>">
<PARAM name="download_file_url" value="<%=hostAddress%>/tcr/controller/tcr_download_file">
<PARAM name="app_installer_path" value="/ugs/tc/req/installs/addins/">
<PARAM name="app_file_list" value="TcROfficeInterfaceSetupwin32.exe">

<!-- Entry point i.e. name of Executable -->
<PARAM name="executable_file_name" value="TcROfficeInterfaceSetupwin32.exe">
<PARAM name="uninst_executable_file_name" value="TcROfficeInterfaceUninstaller.exe">
<!-- Registry Path for Tcr office Interface entries-->
<PARAM name="reg_key_base" value="HKEY_LOCAL_MACHINE\Software\UGSPLM\TeamCenter\TcR Office Interface">
<PARAM name="client_reg_key_base" value="HKEY_LOCAL_MACHINE\SOFTWARE\UGSPLM\Teamcenter\Requirements\<%=serverName%>">

<PARAM name="dot_net_installer_path" value="/ugs/tc/req/installs/dotnetfx.exe">
<PARAM name="locale_list" value="English,Chinese,French,German,Italian,Japanese,Korean,Portuguese,Spanish">
<PARAM name="user_agent" value="<%= request.getHeader("User-Agent") %>">
<PARAM name="dot_net_ver" value="CLR 1.0,CLR 1.1"> <!-- Comma delimited list of required .NET version(s) for ExcelLive; applet will search for version(s) in user_agent param -->
<PARAM name="language" value="<%=request.getParameter("language")%>">
<!-- End TcR Parameters -->
<PARAM name="scriptable" value="true">
<p>This applet requires Java Plug-in 1.4.2 or greater</p>
</OBJECT>
[/HTML]
если это поможет
Вот список файлов после установки интерфейса:
Цитата:

_jvm - folder
TcROfficeInterfaceUninstall - folder
Extensibility.dll
Interop.MSForms.dll
msvcr71.dll
stdole.dll
TcR.dll
TcROffice2K3Addin.dll
TcRUtil.dll
TcRVisioAddin.dll
gacutil.exe
RegAsm.exe
req.ico
TcR.tlb
TcROffice2K3Addin.tlb
TcRVisioAddin.tlb


в папке _jvm собсвенно JVM и находится

273
14 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
Java-апплет здесь не при чём. Ставятся компоненты .NET, но классы в Tcr регистрируются как COM-объекты. Я ещё раз повторюсь - Java и .NET не могут взаимодейстовать. А вот уже апплет юзает ActiveX и открывает доступ к COM-интерфейсам через его CLASSID который чётко указан в строчке:
 
Код:
[COLOR=#000080]classid=[/COLOR][COLOR=#0000ff]"clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"[/COLOR]

Поэтому вся эта жуть выражается такой схемой:
.NET TcR Office Library--->COM registration--->ActiveX Components--->Java Applet
Даже если дело не в Visio поменять компоненты библиотеки TcR не сможешь (исходных кодов нет), а у Java-апплета вообще хата с краю.
18K
14 июня 2006 года
RcT
5 / / 08.06.2006
ОК. Тогда хотя бы:
[QUOTE=RcT] А нельзя ли в .NET посмотреть как-нибудь более полный лог о том что там происходит и где возникает ошибка.
[/QUOTE]
273
14 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=RcT]ОК. Тогда хотя бы:[/quote]
Самый простой способ это написать мааааленькую программку на C#, которая что-нибудь делала с TcR компонентами, а блоке catch написать
 
Код:
[SIZE=2][/SIZE][SIZE=2][COLOR=#0000ff]catch[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#008080]Exception[/COLOR][/SIZE][SIZE=2] e)
{
[/SIZE][SIZE=2][COLOR=#008080]Console[/COLOR][/SIZE][SIZE=2].WriteLine(e.Message);
[/SIZE][SIZE=2][COLOR=#008080]Console[/COLOR][/SIZE][SIZE=2].WriteLine(e.Source);
[/SIZE][SIZE=2][COLOR=#008080]Console[/COLOR][/SIZE][SIZE=2].WriteLine(e.StackTrace);
[/SIZE][SIZE=2][COLOR=#008080]Console[/COLOR][/SIZE][SIZE=2].WriteLine(e.TargetSite);
}
[/SIZE]

Хотя когда выскакивает сообщение об ошибке, Windows предлагать запустить отладчик. Если исключение в .NET приложении обычно запускается .NET CLR Debugger и он даёт достаточно исчерпывающую информацию об ошибке.
18K
15 июня 2006 года
RcT
5 / / 08.06.2006
Скриншот: [ATTACH]816[/ATTACH] А как узнать, запускается ли .NET CLR Debugger
273
17 июня 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=RcT]Скриншот: [ATTACH]816[/ATTACH] А как узнать, запускается ли .NET CLR Debugger[/quote]
В данном случае никак, так как компонент TcR использует блок catch для перехвата исключения сам и в этом блоке описывает код для вывода сообщения и сброса лога.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог