[转]Extending the User Interface in Outlook 2010
Summary: Learn how to programmatically extend the Microsoft Office Fluent user interface (UI) to customize the UI in Microsoft Outlook 2010. The Fluent UI in Microsoft Office 2010 includes the Office Fluent ribbon, menus, and Microsoft Office Backstage view. This article discusses how to customize the explorer and inspector ribbons, the menus and context menus, and Backstage view in the Outlook 2010 UI. It walks through a code sample that illustrates how to customize the ribbon, the context menus, and Backstage view, and examines specific issues that apply to the Outlook 2010 UI. (47 printed pages)
Last modified: January 30, 2013
Applies to: Office 2010 | Outlook 2010 | Visual Studio
In this article
Overview
Sample Add-In
Ribbon Identifiers
Explorer
Inspector
Folder Context Menu
Root Search Folder Context Menu
Store Context Menu
Context Menu for a Mail Item
Context Menu for Multiple Selected Items
Context Menu for an Appointment or Meeting Request
Context Menu for a Task Item
Context Menu for a Contact Item
Context Menu for a Journal Item
Context Menu for a Note Item
Shortcut Context Menu
Attachment Context Menu
Table View Context Menu
Calendar View Context Menu
Card View Context Menu
Timeline View Context Menu
Menu for the Arrange By Command
Context Menu for Time Bar
Context Menu for Free/Busy Bar
Context Menu for a Table View Column
Categories Context Menu
Context Menu for Quick Flags
Context Menu for Flagged Mail Item
Context Menu for Flagged Contact Item
New Items Menu for Mail Module
New Items Menu for Calendar Module
New Items Menu for Contacts Module
New Items Menu for Tasks Module
New Items Menu for Journal Module
New Items Menu for Notes Module
Persona Context Menu for a Sender or Recipient
Menu for Alternative Interactions
Contextual Tabs
Backstage View
Conclusion
Additional Resources
Published: November 2009 | Updated: April 2010
Provided by: Randy Byrne, Microsoft Corporation
Outlook 2010 Sample: Extending the User Interface
Contents
Overview
This article describes the many new ways that you can programmatically customize the following areas in the Outlook 2010 UI:
Explorer ribbons
Inspector ribbons
Context menus
New item menus
Contact Card context menus
Contextual tabs
Backstage view
Specifically, this article explains how to use Fluent UI extensibility to customize the components in each of those areas. To begin, you must supply XML markup to the GetCustomUI method of the IRibbonExtensibility interface. Use the ribbon ID for the component that you want to customize to determine the XML to pass as a returned value in the GetCustomUI method. Your XML typically supplies callbacks that you can use to respond to a button click, or to control the visibility of your ribbon controls.
This article lists the IRibbonControl.Context property that you should expect in Fluent UI extensibility callbacks in your code. In addition, it includes sample XML markup for each UI component, and a screenshot that illustrates the UI component to help you understand where the customization occurs in the Outlook 2010 UI.
Note |
---|
The ribbon IDs and components in this article might change in the final release of Outlook 2010. In some cases, the exact menu items on a menu or context menu depend on the suite of Microsoft Office 2010 installed and the type of Outlook item that is selected. |
Before you read this article, you should already have a basic understanding of how to extend the Fluent UI by using an add-in. If you are not familiar with Fluent UI extensibility, see the technical articles listed in the Additional Resources section.
Sample Add-In
This article has an accompanying sample add-in named RibbonXOutlook14AddinCS. It uses Microsoft Visual C# and requires Microsoft Visual Studio 2008 Service Pack 1 and Outlook 2010.
Overview
The sample add-in demonstrates how to customize the ribbons, menus, context menus, and Backstage view in Outlook 2010. Developed in Visual Studio 2008 Tools for Office, the add-in adds ribbon controls, a custom menu, context menu items, and Backstage view controls, and then displays a message box when the user clicks the control or menu item. The add-in provides a visual element for every entry point in the Outlook 2010 UI that you can customize by using Fluent UI extensibility.
The sample add-in has some additional features that illustrate how to manage certain problem areas in the Outlook 2010 UI. For example, suppose that you want to show a custom group in the ribbon for received e-mail items only. The sample add-in displays the custom ribbon tab only when the selected item in the Outlook explorer is a received mail item or when the received mail item is displayed in an inspector. Although that might seem to be a trivial task at first, it is actually a complex problem because Outlook can display multiple explorer or inspector windows, and your code must be able to respond appropriately. For example, in two open explorer windows, you might have to hide the custom tab in the window that has a meeting selected, but display the custom tab in the window that has a received mail item selected. Once you understand how the sample add-in works, you can use the wrapper classes from the sample to build your own solution that can coordinate the display of your command UI in multiple Outlook windows.
Installation Instructions
To download the sample code installation package
Download the OL2010ExtendingtheUserInterface_CS.zip file from Outlook 2010: Extending the User Interface in the MSDN Samples Gallery.
Extract the .zip file into the folder of your choice. In Windows Vista, the default path for Visual Studio 2008 Tools for Office projects is C:\Users\user\Documents\Visual Studio 2008\Projects.
To run the Outlook Ribbon extensibility sample
Close Outlook 2010.
In the folder where you extracted the RibbonXOutlook14AddinCS.zip file, open the RibbonXOutlook14AddinCS solution.
On the Build menu, click Build RibbonXOutlook14AddinCS.
Start Outlook 2010 to start the add-in in run mode, or press F5 to start the add-in in debug mode. If Outlook does not start in debug mode, complete the following procedure.
To start Outlook in debug mode
In Solution Explorer, select RibbonXOutlook14AddinCS.
On the Project menu, select RibbonXOutlook14AddinCS Properties, and then click the Debug tab.
Under Start Action, select the Start External Program option, and then click Browse.
In the [Drive:]\Program Files\Microsoft Office\Office14 folder, select Outlook.exe.
Press F5 to start the add-in in debug mode.
Code Walkthrough
The Outlook14RibbonXAddinCS solution is built with Microsoft Visual Studio 2008 Service Pack 1. It uses manual authoring of XML markup files instead of the ribbon designer that is provided with Visual Studio Tools for Office. The most important architectural feature is the use of wrapper classes (OutlookExplorer.cs for explorers and OutlookInspector.cs for inspectors) to handle multiple Outlook windows. The wrapper classes are implemented by using a C# Generic List(T) class.
Note |
---|
If you are not writing managed code, you must write native C++ code that mimics the use of these wrapper classes. |
First, the following class-level instance variables are declared in the standard ThisAddin class in Visual Studio 2008 with Visual Studio Tools for Office.
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using Outlook = Microsoft.Office.Interop.Outlook;
using Office = Microsoft.Office.Core; namespace RibbonXOutlook14AddinCS
{
public partial class ThisAddIn
{
#region Instance Variables
Outlook.Application m_Application;
Outlook.Explorers m_Explorers;
Outlook.Inspectors m_Inspectors;
public stdole.IPictureDisp m_pictdisp = null;
// List of tracked explorer windows.
internal static List<OutlookExplorer> m_Windows;
// List of traced inspector windows.
internal static List<OutlookInspector> m_InspectorWindows;
// Ribbon UI reference.
internal static Office.IRibbonUI m_Ribbon;
#endregion
...
}
}
Once the instance variables have been declared, they are used in the Startup method of the ThisAddin class that is provided to all Visual Studio 2008 with Visual Studio Tools for Office add-ins. In the Startup method, which typically occurs when Outlook starts, the code first hooks up an event handler to respond to the NewExplorer event on the Outlook Explorers collection object. After the NewExplorer event has been handled, the active explorer window is added by using the following code.
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
// Initialize variables.
m_Application = this.Application;
m_Explorers = m_Application.Explorers;
m_Inspectors = m_Application.Inspectors;
m_Windows = new List<OutlookExplorer>();
m_InspectorWindows = new List<OutlookInspector>(); // Wire up event handlers to handle multiple Explorer windows.
m_Explorers.NewExplorer +=
new Outlook.ExplorersEvents_NewExplorerEventHandler(
m_Explorers_NewExplorer);
// Wire up event handler to handle multiple Inspector windows.
m_Inspectors.NewInspector +=
new Outlook.InspectorsEvents_NewInspectorEventHandler(
m_Inspectors_NewInspector);
// Add the ActiveExplorer to m_Windows.
Outlook.Explorer expl = m_Application.ActiveExplorer()
as Outlook.Explorer;
OutlookExplorer window = new OutlookExplorer(expl);
m_Windows.Add(window);
// Hook up event handlers for window.
window.Close += new EventHandler(WrappedWindow_Close);
window.InvalidateControl += new EventHandler<
OutlookExplorer.InvalidateEventArgs>(
WrappedWindow_InvalidateControl);
// Get IPictureDisp for CurrentUser on startup.
try
{
Outlook.AddressEntry addrEntry =
Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry;
if (addrEntry.Type == "EX")
{
Outlook.ExchangeUser exchUser =
addrEntry.GetExchangeUser() as Outlook.ExchangeUser;
m_pictdisp = exchUser.GetPicture() as stdole.IPictureDisp;
}
}
catch (Exception ex)
{
// Write exception to debug window.
Debug.WriteLine(ex.Message);
}
}
Just after Outlook starts, Office calls GetCustomUI. GetCustomUI is the method of the IRibbonExtensibility interface that loads custom XML markup. In Outlook 2007, Office called GetCustomUI when the first instance of a given inspector type, such as a contact or appointment, was displayed. In Outlook 2010, Office calls GetCustomUI before the ThisAddin.Startup method to accommodate the loading of ribbon customizations for the Outlook explorer ribbon. Because Office calls GetCustomUI only once for the first Outlook explorer during startup and multiple times for the first instance of multiple inspector types, consider using a Switch statement to control loading of XML markup for different customized Ribbons. For each ribbon in Outlook, GetCustomUI is called and Office passes the ribbon ID string that identifies the ribbon that is being loaded in Outlook. For a complete listing of ribbon IDs, see the section Ribbon Identifiers.
In the sample code, there are three XML markup files:
ContactCard.xml
Explorer.xml
ReadMail.xml
ContactCard.xml contains XML markup for context menus on the Contact Card. Explorer.xml contains XML markup for the explorer ribbon, context menus, and Backstage view. Readmail.xml contains XML markup for a read mail inspector.
To get a better idea of how this technique works, examine the following code from the GetCustomUI method in the OutlookRibbonXclass.
public string GetCustomUI(string ribbonID)
{
string customUI = string.Empty;
Debug.WriteLine(ribbonID);
// Return the appropriate XML markup for ribbonID.
switch (ribbonID)
{
case "Microsoft.Outlook.Explorer":
customUI = GetResourceText(
"RibbonXOutlook14AddinCS.Explorer.xml");
return customUI;
case "Microsoft.Outlook.Mail.Read":
customUI= GetResourceText(
"RibbonXOutlook14AddinCS.ReadMail.xml");
return customUI;
case "Microsoft.Mso.IMLayerUI":
customUI = GetResourceText(
"RibbonXOutlook14AddinCS.ContactCard.xml");
return customUI;
default:
return string.Empty;
}
}
Take a look at the sample solution for a complete listing of ContactCard.xml, Explorer.xml, and ReadMail.xml. Once custom XML markup has been loaded for each add-in, it is time to write code in Fluent UI extensibility callbacks to hide and show the tab named MyTab, depending on whether the selected item in the explorer is a received mail item. To complete the scenario, you must hook up another set of events in the constructor of the OutlookExplorer class.
public OutlookExplorer(Outlook.Explorer explorer)
{
m_Window = explorer; // Hook up Close event.
((Outlook.ExplorerEvents_Event)explorer).Close +=
new Outlook.ExplorerEvents_CloseEventHandler(
OutlookExplorerWindow_Close); // Hook up SelectionChange event.
m_Window.SelectionChange +=
new Outlook.ExplorerEvents_10_SelectionChangeEventHandler(
m_Window_SelectionChange);
}
The SelectionChange event handler is very straightforward. The SelectionChange event occurs whenever the user changes the selection in an explorer window. When SelectionChange occurs, the RaiseInvalidateControl method is called and the control ID "MyTab" is passed to the method. RaiseInvalidateControl calls an event delegate named WrappedWindow_InvalidateControl in the ThisAddin class.
private void m_Window_SelectionChange()
{
RaiseInvalidateControl("MyTab");
}
void WrappedWindow_InvalidateControl(object sender,
OutlookExplorer.InvalidateEventArgs e)
{
if (m_Ribbon != null)
{
m_Ribbon.InvalidateControl(e.ControlID);
}
}
The m_Ribbon variable represents an IRibbonUI object. When the InvalidateControl method of the IRibbonUI object is called, ribbon callbacks occur for the "MyTab" control. You could also call the Invalidate method of IRibbonUI, but that method causes callbacks for all of the controls that your add-in adds to the ribbon. In general, make your invalidation more granular than global, especially when your callbacks load image resources with a getImage callback. For the "MyTab" control, a getVisible callback has been defined in the RibbonXAddin class that controls the visibility of the tab. If the getVisible callback returns True, the tab is visible; otherwise, "MyTab" is hidden. The following code is the MyTab_GetVisible callback in its entirety.
// Only show MyTab when explorer selection is
// a received mail or when inspector is a read note.
public bool MyTab_GetVisible(Office.IRibbonControl control)
{
if (control.Context is Outlook.Explorer)
{
Outlook.Explorer explorer =
control.Context as Outlook.Explorer;
Outlook.Selection selection = explorer.Selection;
if (selection.Count == 1)
{
if (selection[1] is Outlook.MailItem)
{
Outlook.MailItem oMail =
selection[1] as Outlook.MailItem;
if (oMail.Sent == true)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return false;
}
}
else if (control.Context is Outlook.Inspector)
{
Outlook.Inspector oInsp =
control.Context as Outlook.Inspector;
if (oInsp.CurrentItem is Outlook.MailItem)
{
Outlook.MailItem oMail =
oInsp.CurrentItem as Outlook.MailItem;
if (oMail.Sent == true)
{
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return true;
}
}
This walkthrough detailed the most important strategies for extending the ribbon in Outlook 2010. In summary, your code should support the following:
The use of multiple explorer or inspector windows in Outlook 2010. Wrap the windows in a separate class instance that can raise events appropriate to that specific window.
The appropriate use of the InvalidateControl or Invalidate methods of the IRibbonUI interface to cause callbacks to occur.
The evaluation of different item types (based on the message class, built-in properties, or custom properties of a specific item type) in both event handlers and ribbon callbacks.
Ribbon Identifiers
The following table lists the ribbon IDs that are passed to the GetCustomUI method of the IRibbonExtensibility interface. Use the ribbon ID to determine the XML to return in the GetCustomUI method.
Ribbon ID |
Message class |
Microsoft.OMS.MMS.Compose |
IPM.Note.Mobile.MMS.* |
Microsoft.OMS.MMS.Read |
IPM.Note.Mobile.MMS.* |
Microsoft.OMS.SMS.Compose |
IPM.Note.Mobile.SMS.* |
Microsoft.OMS.SMS.Read |
IPM.Note.Mobile.SMS.* |
Microsoft.Outlook.Appointment |
IPM.Appointment.* |
Microsoft.Outlook.Contact |
IPM.Contact.* |
Microsoft.Outlook.DistributionList |
IPM.DistList.* |
Microsoft.Outlook.Journal |
IPM.Activity.* |
Microsoft.Outlook.Mail.Compose |
IPM.Note.* |
Microsoft.Outlook.Mail.Read |
IPM.Note.* |
Microsoft.Outlook.MeetingRequest.Read |
IPM.Schedule.Meeting.Request or IPM.Schedule.Meeting.Canceled |
Microsoft.Outlook.MeetingRequest.Send |
IPM.Schedule.Meeting.Request |
Microsoft.Outlook.Post.Compose |
IPM.Post.* |
Microsoft.Outlook.Post.Read |
IPM.Post.* |
Microsoft.Outlook.Report |
IPM.Report.* |
Microsoft.Outlook.Resend |
IPM.Resend.* |
Microsoft.Outlook.Response.Compose |
IPM.Schedule.Meeting.Resp.* |
Microsoft.Outlook.Response.CounterPropose |
IPM.Schedule.Meeting.Resp.* |
Microsoft.Outlook.Response.Read |
IPM.Schedule.Meeting.Resp.* |
Microsoft.Outlook.RSS |
IPM.Post.Rss.* |
Microsoft.Outlook.Sharing.Compose |
IPM.Sharing.* |
Microsoft.Outlook.Sharing.Read |
IPM.Sharing.* |
Microsoft.Outlook.Task |
IPM.Task.* and IPM.TaskRequest.* |
Microsoft.Outlook.Explorer |
Not applicable. Use this ribbon ID to return XML markup for explorer ribbons, context menus, and Backstage view. |
Explorer
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
When Outlook 2010 starts, it calls the GetCustomUI method of the IRibbonExtensibility interface and specifies the ribbon ID in the RibbonID parameter for the add-in. The add-in should implement the GetCustomUI method such that if RibbonID is Microsoft.Outlook.Explorer, GetCustomUI returns the XML markup for explorer and context menu customizations.
XML Markup Example
<ribbon>
<tabs>
<tab id="MyTab"
getVisible="MyTab_GetVisible"
label="MyTab">
<group label="MyGroup" id="MyGroup">
<button id="MyButton"
size="large"
label="MyButton"
imageMso="HappyFace"
onAction="OnMyButtonClick"/>
</group>
</tab>
</tabs>
</ribbon>
User Interface Example
Inspector
Ribbon ID
Outlook supports different ribbons in inspectors that display different item types. Depending on the message class of the item to be displayed in an inspector, the add-in should expect Outlook to pass the corresponding ribbon ID as the RibbonID parameter to the GetCustomUI method.
Ribbon ID |
Message Class |
Microsoft.OMS.MMS.Compose |
IPM.Note.Mobile.MMS.* |
Microsoft.OMS.MMS.Read |
IPM.Note.Mobile.MMS.* |
Microsoft.OMS.SMS.Compose |
IPM.Note.Mobile.SMS.* |
Microsoft.OMS.SMS.Read |
IPM.Note.Mobile.SMS.* |
Microsoft.Outlook.Appointment |
IPM.Appointment.* |
Microsoft.Outlook.Contact |
IPM.Contact.* |
Microsoft.Outlook.DistributionList |
IPM.DistList.* |
Microsoft.Outlook.Journal |
IPM.Activity.* |
Microsoft.Outlook.Mail.Compose |
IPM.Note.* |
Microsoft.Outlook.Mail.Read |
IPM.Note.* |
Microsoft.Outlook.MeetingRequest.Read |
IPM.Schedule.Meeting.Request or IPM.Schedule.Meeting.Canceled |
Microsoft.Outlook.MeetingRequest.Send |
IPM.Schedule.Meeting.Request |
Microsoft.Outlook.Post.Compose |
IPM.Post.* |
Microsoft.Outlook.Post.Read |
IPM.Post.* |
Microsoft.Outlook.Report |
IPM.Report.* |
Microsoft.Outlook.Resend |
IPM.Resend.* |
Microsoft.Outlook.Response.Compose |
IPM.Schedule.Meeting.Resp.* |
Microsoft.Outlook.Response.CounterPropose |
IPM.Schedule.Meeting.Resp.* |
Microsoft.Outlook.Response.Read |
IPM.Schedule.Meeting.Resp.* |
Microsoft.Outlook.RSS |
IPM.Post.Rss.* |
Microsoft.Outlook.Sharing.Compose |
IPM.Sharing.* |
Microsoft.Outlook.Sharing.Read |
IPM.Sharing.* |
Microsoft.Outlook.Task |
IPM.Task.* and IPM.TaskRequest.* |
IRibbonControl.Context
Inspector object
Remarks
When Outlook 2010 displays the first inspector for a built-in message class, Outlook calls the GetCustomUI method of the IRibbonExtensibility interface and specifies the ribbon ID in the RibbonID parameter for the add-in. The add-in should implement the GetCustomUI method such that GetCustomUI returns the appropriate XML markup based on RibbonID.
Use the CurrentItem property of the Inspector object to return the item-level object such as MailItem, AppointmentItem, ContactItem, or TaskItem.
XML Markup Example
<ribbon>
<tabs>
<tab id="MyTab"
getVisible="MyTab_GetVisible"
label="MyTab">
<group label="MyGroup" id="MyGroup" >
<button id="MyButton"
size="large"
label="MyButton"
imageMso="HappyFace"
onAction="OnMyButtonClick"/>
</group>
</tab>
</tabs>
</ribbon>
User Interface Example
Folder Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Folder object
Remarks
When Outlook 2010 displays the following context menu, a folder is selected in the Folder List in the Navigation Pane.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuFolder">
<button id="MyContextMenuFolder"
label="ContextMenuFolder"
onAction="OnMyButtonClick" />
</contextMenu>
</contextMenus>
User Interface Example
Root Search Folder Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Folder object
Remarks
When Outlook 2010 displays the following context menu, the root search folder, Search Folders, is selected in the Folder List in the Navigation Pane.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuSearchRoot">
<button id="MyContextMenuSearchRoot"
label="ContextMenuSearchRoot"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Store Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Store object
Remarks
When Outlook 2010 displays the following context menu, a store folder is selected in the Folder List in the Navigation Pane.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuStore">
<button id="MyContextMenuStore"
label="ContextMenuStore"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for a Mail Item
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Selection object
Remarks
When Outlook 2010 displays the following context menu, a mail item is selected in the current view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuMailItem">
<button id="MyContextMenuMailItem"
label="ContextMenuMailItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for Multiple Selected Items
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Selection object
Remarks
When Outlook 2010 displays the following context menu, multiple items are selected in the current view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuMultipleItems">
<button id="MyContextMenuMultipleItems"
label="ContextMenuMultipleItems"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for an Appointment or Meeting Request
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Selection object
Remarks
When Outlook 2010 displays the following context menu, an appointment or a meeting request is selected in the current calendar view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuCalendarItem">
<button id="MyContextMenuCalendarItem"
label="ContextMenuCalendarItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for a Task Item
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Selection object
Remarks
When Outlook 2010 displays the following context menu, a task item is selected in the current task view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuTaskItem">
<button id="MyContextMenuTaskItem"
label="ContextMenuTaskItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for a Contact Item
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Selection object
Remarks
When Outlook 2010 displays the following context menu, a contact item is selected in the current view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuContactItem">
<button id="MyContextMenuContactItem"
label="ContextMenuContactItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for a Journal Item
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Selection object
Remarks
When Outlook 2010 displays the following context menu, a journal item is selected in the current view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuJournalItem">
<button id="MyContextMenuJournalItem"
label="ContextMenuJournalItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for a Note Item
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Selection object
Remarks
When Outlook 2010 displays the following context menu, a note item is selected in the current view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuNoteItem">
<button id="MyContextMenuNoteItem"
label="ContextMenuNoteItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Shortcut Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
OutlookBarShortcut object
Remarks
When Outlook 2010 displays the following context menu, a shortcut is selected in the Shortcuts module.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuShortcut">
<button id="MyContextMenuShortcut"
label="ContextMenuShortcut"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Attachment Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
AttachmentSelection object
Remarks
When Outlook 2010 displays the following context menu, one or more attachments are selected in the Reading Pane in the explorer, or in an inspector.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuAttachments">
<button id="MyContextMenuAttachments"
label="ContextMenuAttachments"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Table View Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
View object
Remarks
Outlook 2010 displays the following context menu when a user displays the context menu in a table view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuTableView">
<button id="MyContextMenuTableView"
label="ContextMenuTableView"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Calendar View Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
View object
Remarks
Outlook 2010 displays the following context menu when a user displays the context menu in a calendar view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuCalendarView">
<button id="MyContextMenuCalendarView"
label="ContextMenuCalendarView"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Card View Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
View object
Remarks
Outlook 2010 displays the following context menu when a user displays the context menu in a card view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuCardView">
<button id="MyContextMenuCardView"
label="ContextMenuCardView"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Timeline View Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
View object
Remarks
Outlook 2010 displays the following context menu when a user displays the context menu in a timeline view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuTimelineView">
<button id="MyContextMenuTimelineView"
label="ContextMenuTimelineView"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Menu for the Arrange By Command
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following menu when a user points to Arrange By in the context menu for a field in a table view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuTableArrangeBy">
<button id="MyContextMenuTableArrangeBy"
label="ContextMenuTableArrangeBy"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for Time Bar
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following context menu when a user right-clicks the time bar in a calendar view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuCalendarViewTimeBar">
<button id="MyContextMenuCalendarViewTimeBar"
label="ContextMenuCalendarViewTimeBar"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for Free/Busy Bar
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following context menu when a user right-clicks the free/busy bar in a calendar view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuCalendarViewFreeBusyBar">
<button id="MyContextMenuCalendarViewFreeBusyBar"
label="ContextMenuCalendarViewFreeBusyBar"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for a Table View Column
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following context menu when a user right-clicks a column header in a table view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuTableViewColumn">
<button id="MyContextMenuTableViewColumn"
label="ContextMenuTableViewColumn"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Categories Context Menu
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following context menu when a user right-clicks a category or, if no category has been specified, the user right-clicks under the Category column in a table view.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuCategories">
<button id="MyContextMenuCategories"
label="ContextMenuCategories"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for Quick Flags
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following context menu when a user displays the context menu for a quick flag.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuQuickFlags">
<button id="MyContextMenuQuickFlags"
label="ContextMenuQuickFlags"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for Flagged Mail Item
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following context menu when a user displays the context menu for a flagged mail item in the To-Do Bar.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuFlaggedMailItem">
<button id="MyContextMenuFlaggedMailItem"
label="ContextMenuFlaggedMailItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Context Menu for Flagged Contact Item
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following context menu when a user displays the context menu for a flagged mail item in the To-Do Bar.
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuFlaggedContactItem">
<button id="MyContextMenuFlaggedContactItem"
label="ContextMenuFlaggedContactItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
New Items Menu for Mail Module
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following menu when a user selects New Items in the Home tab of the explorer ribbon for the Mail module. Although the New Items menu is not a context menu, the markup for a custom menu item should be placed inside the <contextMenus></contextMenus> tags. That way, you can add a command for an item that is based on a custom message class to the built-in New Itemsmenu.
XML Markup Example
<contextMenus>
<contextMenu idMso="MenuMailNewItem">
<button id="MyMenuMailNewItem"
label="MenuNewMailItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
New Items Menu for Calendar Module
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following menu when a user clicks New Items in the Home tab of the explorer ribbon for the Calendar module. Although the New Items menu is not a context menu, the markup for a custom menu item should be placed inside the <contextMenus></contextMenus> tags. That way, you can add a command for an item that is based on a custom message class to the built-in New Itemsmenu.
XML Markup Example
<contextMenus>
<contextMenu idMso="MenuCalendarNewItem">
<button id="MyMenuCalendarNewItem"
label="MenuCalendarNewItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
New Items Menu for Contacts Module
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following menu when a user clicks New Items in the Home tab of the explorer ribbon for the Contacts module. Although the New Items menu is not a context menu, the markup for a custom menu item should be placed inside the <contextMenus></contextMenus> tags. That way, you can add a command for an item that is based on a custom message class to the built-in New Itemsmenu.
XML Markup Example
<contextMenus>
<contextMenu idMso="MenuContactsNewItem">
<button id="MyMenuContactsNewItem"
label="MenuContactsNewItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
New Items Menu for Tasks Module
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following menu when a user clicks New Items in the Home tab of the explorer ribbon for the Tasks module. Although the New Items menu is not a context menu, the markup for a custom menu item should be placed inside the <contextMenus></contextMenus> tags. That way, you can add a command for an item that is based on a custom message class to the built-in New Itemsmenu.
XML Markup Example
<contextMenus>
<contextMenu idMso="MenuTasksNewItem">
<button id="MyMenuTasksNewItem"
label="MenuTasksNewItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
New Items Menu for Journal Module
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following menu when a user clicks New Items in the Home tab of the explorer ribbon for the Journal module. Although the New Items menu is not a context menu, the markup for a custom menu item should be placed inside the <contextMenus></contextMenus> tags. That way, you can add a command for an item that is based on a custom message class to the built-in New Itemsmenu.
XML Markup Example
<contextMenus>
<contextMenu idMso="MenuJournalNewItem">
<button id="MyMenuJournalNewItem"
label="MenuJournalNewItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
New Items Menu for Notes Module
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object
Remarks
Outlook 2010 displays the following menu when a user clicks New Items in the Home tab of the explorer ribbon for the Notes module. Although the New Items menu is not a context menu, the markup for a custom menu item should be placed inside the <contextMenus></contextMenus> tags. That way, you can add a command for an item that is based on a custom message class to the built-in New Itemsmenu.
XML Markup Example
<contextMenus>
<contextMenu idMso="MenuNotesNewItem">
<button id="MyMenuNotesNewItem"
label="MenuNotesNewItem"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Persona Context Menu for a Sender or Recipient
Ribbon ID
Microsoft.Mso.IMLayerUI
IRibbonControl.Context
Office.IMsoContactCard object
Remarks
Outlook 2010 displays the persona context menu when a user right-clicks a sender or a recipient of an Outlook item. To determine the identity of the sender or recipient, use the Address property of the IMsoContactCard object in the Office object model to obtain an AddressEntry object in the Outlook object model, which represents the recipient as shown in the following code example.
if (control.Context is Microsoft.Office.Core.IMsoContactCard)
{
msg = "Context=IMsoContactCard" + "\n";
Office.IMsoContactCard card = control.Context as Office.IMsoContactCard;
Outlook.AddressEntry addr =
Globals.ThisAddIn.Application.Session.GetAddressEntryFromID(
card.Address);
if (addr != null)
{
msg = msg + addr.Name;
}
MessageBox.Show(msg);
}
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuContactCardRecipient">
<button id="MyContextMenuContactCardRecipient"
label="ContextMenuContactCardRecipient"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Menu for Alternative Interactions
Ribbon ID
Microsoft.Mso.IMLayerUI
IRibbonControl.Context
Office.IMsoContactCard object
Remarks
To interact with a contact by using a way other than e-mail, instant message, or phone, a user can specify an alternative form on the shortcut menu that is on a Contact Card. To display a Contact Card, a user can rest the pointer on, click, or right-click a sender or recipient of an Outlook item.
To determine the identity of the sender or recipient, use the Address property of the IMsoContactCard object in the Office object model to obtain an AddressEntry object in the Outlook object model, which represents the recipient as shown in the following code example.
if (control.Context is Microsoft.Office.Core.IMsoContactCard)
{
msg = "Context=IMsoContactCard" + "\n";
Office.IMsoContactCard card = control.Context as Office.IMsoContactCard;
Outlook.AddressEntry addr =
Globals.ThisAddIn.Application.Session.GetAddressEntryFromID
(card.Address);
if (addr != null)
{
msg = msg + addr.Name;
}
MessageBox.Show(msg);
}
XML Markup Example
<contextMenus>
<contextMenu idMso="ContextMenuContactCardOverflowDropdown">
<button id="MyContextMenuContactCardOverflow"
label="ContextMenuContactCardOverflow"
onAction="OnMyButtonClick"/>
</contextMenu>
</contextMenus>
User Interface Example
Contextual Tabs
Ribbon ID
Microsoft.Outlook.Explorer or appropriate Inspector RibbonID
IRibbonControl.Context
Explorer object or Inspector object
Remarks
Contextual tabs appear when a user selects an object in the Outlook user interface with the intent to edit or modify that object. Customizing a contextual tab is similar to customizing a built-in ribbon tab, but the markup for customization uses <contextualTabs></contextualTabs> tags instead of <tabs></tabs>. Contextual tabs are used extensively in Outlook 2010. The following example shows how to customize the contextual tab for attachments named Attachment Tools.The Attachment Context Menu described previously adds a context menu item that can act on the selected attachment. To create an equivalent command in the Attachment Tools contextual tab, you need to supply XML markup as shown in the following XML markup example and then determine the selected attachment by using the AttachmentSelection object returned by IRibbonControl.Context as shown in the following C# code fragment:
else if (control.Context is Outlook.Explorer)
{
msg = "Context=Explorer" + "\n";
Outlook.Explorer explorer =
control.Context as Outlook.Explorer;
if (explorer.AttachmentSelection.Count >= 1)
{
Outlook.AttachmentSelection attachSel =
explorer.AttachmentSelection;
foreach (Outlook.Attachment attach in attachSel)
{
msg = msg + attach.DisplayName + "\n";
}
}
else
{
Outlook.Selection selection =
explorer.Selection;
if (selection.Count == 1)
{
OutlookItem olItem =
new OutlookItem(selection[1]);
msg = msg + olItem.Subject
+ "\n" + olItem.LastModificationTime;
}
else
{
msg = msg + "Multiple Selection Count="
+ selection.Count;
}
}
}
}
XML Markup Example
<contextualTabs>
<tabSet idMso="TabSetAttachments">
<tab idMso="TabAttachments">
<group label="MyGroup" id="MyAttachmentGroup">
<button id="MyButtonAttachments"
size="large"
label="MyButtonAttachments"
imageMso="HappyFace"
onAction="OnMyButtonClick" />
</group>
</tab>
</tabSet>
</contextualTabs>
User Interface Example
Backstage View
Ribbon ID
Microsoft.Outlook.Explorer
IRibbonControl.Context
Explorer object or Inspector object
Remarks
Backstage view helps users to find commonly used features and to discover new ways to work with their documents. To access Backstage view, click the File tab that appears to the left of the Home tab. In Outlook 2010, you can use Backstage view to expose application-level settings for an add-in. Consider customizing Backstage view to replace the property page extensions that were accessible when you clicked Tools and then Options in earlier versions of Outlook. Property page extensions continue to work in Outlook 2010, but users might not find them easily. To access add-in property page extensions, open Backstage view, click the Options command to display the Outlook Options dialog box, click the Add-ins tab, and then click the Add-in Options button.
Outlook 2010 can display Backstage view in either an explorer or inspector window. Use the IRibbonControl.Context property to determine whether Backstage view is hosted in an explorer or inspector window.
A tab in Backstage view is a functional unit. Backstage view contains default tabs. For example, Backstage view for the Outlook explorer contains the Info, Open, Print, and Help tabs. If you want to create a custom tab and show it in only an Outlook explorer or inspector window, use the GetVisible callback. The following C# code example causes the MyPlace tab to be visible only in the explorer window.
public bool MyPlace_GetVisible(IRibbonControl control)
{
if (control.Context is Microsoft.Office.Interop.Outlook.Explorer)
return true;
else
return false;
}
XML Markup Example
<backStage>
<tab id="MyBackStageTab"
label="MyTab"
getVisible="MyBackStageTab_GetVisible">
<firstColumn>
<group id="regularGroup"
label="My Regular Group"
helperText="My Regular Group Helper Text">
<primaryItem>
<button id="MyHeroButton"
label="My Hero Button"
imageMso="MagicEightBall"
isDefinitive="false"
onAction="OnMyButtonClick"
screentip="Click to spin the magic eight ball."/>
</primaryItem>
<bottomItems>
<hyperlink
id="hyperlink"
label="Office Developer Center"
target="http://msdn.microsoft.com/en-us/office/default.aspx"/>
<imageControl id="userImage"
getImage="GetCurrentUserImage"/>
<layoutContainer id="vertical"
align="left"
layoutChildren="vertical">
<labelControl id="labelControl2"
label="Vertical layout"/>
<radioGroup id="myradiogroup1" label="Options">
<radioButton id="rb1" label="Option 1"/>
<radioButton id="rb2" label="Option 2"/>
<radioButton id="rb3" label="Option 3"/>
</radioGroup>
</layoutContainer>
<groupBox id="mygroupbox1" label="Check Boxes">
<checkBox id="check1" label="Check Box 1"/>
<checkBox id="check2" label="Check Box 2"/>
<checkBox id="check3" label="Check Box 3"/>
</groupBox>
<layoutContainer id="vertical2"
align="left"
layoutChildren="vertical">
<comboBox id="comboBox" label="Color ComboBox">
<item id="cbi1" label="Blue"/>
<item id="cbi2" label="Magenta"/>
<item id="cbi3" label="Cyan"/>
</comboBox>
</layoutContainer>
</bottomItems>
</group>
<taskGroup id="taskGroup"
label="My Task Group"
helperText="My Task Group Helper Text">
<category id="MyCategory" label="My Category">
<task id="MyTask"
tag="MyTask"
isDefinitive="true"
label="My Task"
imageMso="NewTask"/>
</category>
</taskGroup>
</firstColumn>
<secondColumn>
<group id="myemptygroup">
</group>
</secondColumn>
</tab>
</backstage>
User Interface Example
Conclusion
In the 2007 Microsoft Office system, the Fluent UI includes the ribbon, menus, enhanced screen tips, a Mini toolbar, and keyboard shortcuts that appear in various Office applications. Office 2010 adds Backstage view to the Fluent UI. Fluent UI extensibility supports the ability to customize Fluent UI components programmatically. For example, Outlook 2010 provides many ways to extend the ribbon in an explorer or inspector, the menus, the context menus, and Backstage view. The principles behind programmatic extensions to the Fluent UI are all very similar; all involve using IRibbonExtensibility.GetCustomUI to specify XML markup for the custom UI and writing callbacks in an add-in to respond to user actions on the custom UI. The consistent extensibility design makes it easier for Outlook 2010 add-in developers to further enhance their UI.
Additional Resources
The following resources provide more information about the programmatic enhancements to the Fluent UI in Office 2010:
Introduction to the Office 2010 Backstage View for Developers
Ribbon Extensibility in Office 2010: Tab Activation and Auto-Scaling
Microsoft Office 2010 Fluent User Interface Control Identifiers
The following resources provide in-depth information about how to customize the ribbon. Although they target Outlook 2007, many of the principles still apply to Office 2010.
[转]Extending the User Interface in Outlook 2010的更多相关文章
- Outlook 2010 对话简介 邮件自动关联
对话简介 默认情况下,Microsoft Outlook 2010 收件箱中的电子邮件按日期进行组织并按对话进行排列,对话将具有相同主题的邮件组合为能以展开或折叠形式进行查看的对话.这在帮助您提高浏览 ...
- [转]VS 2010 : 如何开发和部署Outlook 2010插件(Add-in)
本文转自:https://www.cnblogs.com/chenxizhang/archive/2010/05/08/1730766.html 概述: 这篇文章,我将通过一个简单的例子,给大家分享一 ...
- Outlook 2010中263邮箱客户端设置
Outlook 2010中263邮箱客户端设置 1.首次添加电子邮箱账户:打开outlook,在账户设置和服务中分别选择:“手动配置服务器设置或其他服务器类型”,“Internet电子邮件” 2.在i ...
- Outlook 2010打开没反应,只有任务栏有图标的解决方法
Outlook 2010打开没反应,任务栏图标显示如下: 解决方法: 按下Windows+R键,输入regedit: 按回车: 请在注册表编辑器中定位到以下键值,重命名以下4项(比如将outlook重 ...
- outlook 2010 搜索不到邮件
打开outlook 2010 文件, 选项, 加载项, 转到 windows search eamil indexer(打勾) 关闭outlook 控制面板, 索引选项, 高级, 重建索引
- 重置outlook 2010
1.进入 D:\program files\mirosoft office\ioffice14 2.outlook /importprf .\.prf 3.账号问题可以-->控制面板--> ...
- outlook 2010 自动密送Email
以下功能请勿非法使用: 密抄到多人这个需要用到宏 方法一: 1.在Outlook里面键入ALT+F11打开VBA编辑器 2.展开“Project (VbaProject.OTM)/Microsoft ...
- 如何实现Outlook 2010 下载邮件后自动删除服务器上的邮件
outlook2010---文件---信息---账户设置---选中要设置的帐号---双击点选要设置的邮箱---其他设置---高级---在服务器上保留邮件的副本---14天后删除服务器上的邮件副本,修改 ...
- OutLook 2010 收件箱子文件夹收到新邮件时没有桌面通知
开始---规则----管理规则和通知 规则和通知---电子邮件规则---批量选择账号---更改规则---在新邮件通知和窗口显示(选中)---确定 录入通知邮件消息---确定 效果如下:
随机推荐
- AOP编程的学习总结
前几天听到一个同事说起AOP 然后就想学习下应用到项目中去,自己也是在网上找了很多的资料,之后发现 网上的大部分资料的内容几乎都是如出一撤,于是自己就整理了一下再加上这几天的学习总结到的知识写到这篇文 ...
- .net mvc使用FlexPaper插件实现在线预览PDF,EXCEL,WORD的方法
FlexPaper插件可以实现在浏览器中在线预览pdf,word,excel等. 在网上看到很多关于这个插件实现预览的技术,但是很难做到word和excel在线预览. pdf很好实现. 首先下载相关的 ...
- .Net框架搭建:SQL Server EF MVC简单三层框架
https://blog.csdn.net/pukuimin1226/article/details/52313656
- item style edit in sharepoint 2013
标题头添加属性:(如果需要使用ddwrt)xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime&quo ...
- jxl库介绍
jxl是个韩国人开发的java中操作excel的库(棒子国思密达) 相对于另一个java excel库poi来说,jxl具有小巧和使用简单等优点. File uploadedFile = new Fi ...
- 安装 rabbitmq ,通过生成器获取redis列表数据 与 Celery 分布式异步队列
一.安装rabbitmq @全体成员 超简易安装rabbitmq文档 1.安装配置epel源rpm -ivh http://dl.fedoraproject.org/pub/epel/6/i386/ ...
- Python3.5 学习八 附加知识点 paramiko和rsa非对称秘钥的适用
关于paramiko: SSH SFTP 机器上没有安装该模块,只是初步了解了下,没有细细研究. 可能以后只有做运维的才能用到的吧 利用秘钥,在ssh中不输入用户名密码进行登录 利用秘钥进行FTP操作 ...
- 程序猿的日常——SpringMVC系统架构与流程回顾
web开发经历了很漫长的时间,在国内也快有十几年的时间了.从最开始的进程级到现在的MVC经历了很多的改进和优化,本篇就主要复习了解下Spring MVC相关的知识. 发展历程 第一阶段 CGI进程响应 ...
- day 69crm(6) stark组件 action 和 多层过滤效果
前情提要: 今天学的是stark 组件的 action 和多层过效果 一: action (自定制函数多选功能效果) 1: 学习 观点明确: 2: 多选效果前端和后端进行的操作 2& ...
- aspectj
http://stackoverflow.com/questions/25209339/spring-aspectj-weaving-for-java-8-using-aspectj-maven-pl ...