在Eclipse4中从菜单贡献传递secondaryId到零件创建

在Eclipse4中从菜单贡献传递secondaryId到零件创建,eclipse,eclipse-rcp,e4,Eclipse,Eclipse Rcp,E4,我目前正在尝试修复应用程序中的一个回归问题,这似乎是由我们从e3切换到使用e4和e3兼容层引起的 我们有一些视图是由它们的secondaryId配置的。这些视图仅在用户选择菜单选项时创建,我们依靠菜单贡献来设置secondaryId,以便视图可以根据该信息进行自我配置 使用e3,我们在视图pluginsplugin.xml的org.eclipse.ui.views扩展点中定义了一个视图: <extension point="org.eclipse.ui.views"> <

我目前正在尝试修复应用程序中的一个回归问题,这似乎是由我们从e3切换到使用e4和e3兼容层引起的

我们有一些视图是由它们的
secondaryId
配置的。这些视图仅在用户选择菜单选项时创建,我们依靠菜单贡献来设置
secondaryId
,以便视图可以根据该信息进行自我配置

使用e3,我们在视图plugins
plugin.xml
org.eclipse.ui.views
扩展点中定义了一个
视图

<extension point="org.eclipse.ui.views">
   <category id="my.view.category"
             name="My View Category Name">
   </category>
   <view allowMultiple="true"
         category="my.view.category"
         class="my.views.View"
         id="my.views.view.multiple"
         name="My Views View"
         restorable="true">
   </view>
</extension>
这很有效。当用户选择“我的菜单”菜单上的“特定视图”项时,在类
My.views.View
getViewSite().getSecondaryId()
上调用了
createPartControl()
,并正确返回了
viewSpecificData
,可用于配置视图

然而,在e4中,这不起作用。通过跟踪代码,
ViewReference
类不再显式存储
secondaryId
,而是
ViewPart
ViewReference
只需提取
viewId
中冒号后的所有内容,并将其作为
secondaryId
返回。因此,我们现有的
viewId
中没有冒号,返回的第二个id是
null

我尝试删除
secondaryId
并将我的
viewSpecificData
添加到
viewId

        <parameter name="org.eclipse.ui.views.showView.viewId"
                   value="my.views.view.multiple:viewSpecificData">
        </parameter>
这是可行的,但是我有十几个菜单项需要在我正在处理的应用程序中转换,这意味着有十几个新视图,还有十几个东西需要在每个应用程序的两个不同部分
plugin.xml
文件之间保持一致。不仅如此,我们在这个框架上构建了24个应用程序,因此我们可以很容易地讨论需要添加到整个代码库中的数百个视图

我忍不住觉得一定有更好的办法

所以

  • 是否有一种方法可以将菜单贡献中的
    secondaryId
    信息获取到
    viewId
    中,而无需为每个视图创建一个新的
    视图
  • 或者,是否有办法创建一个单独的
    视图
    ,无论冒号后面的文本是什么†都将使用该视图
  • 最后,有没有更好的方法来解决获取启动相同视图类但具有特定视图配置的菜单命令的问题

†我已尝试添加一个具有
id=“my.views.view.multiple:*”
的视图。

我想您可以定义自己的命令并编写一个正确处理参数的命令处理程序。对于兼容模式,您只需要使用主id和辅助id调用
IWorkbenchPage.showView
方法的变体。
        <parameter name="org.eclipse.ui.views.showView.viewId"
                   value="my.views.view.multiple:viewSpecificData">
        </parameter>
<extension point="org.eclipse.ui.views">
   <view allowMultiple="true"
         category="my.view.category"
         class="my.views.View"
         id="my.views.view.multiple:viewSpecificData"
         name="My Views View"
         restorable="true">
   </view>
</extension>