place button on ribbon for compose & read message

  • Thread starter Thread starter sd
  • Start date Start date
S

sd

hello

I've Outlook addin for office 2007 using VSTO SE.I need to add custom
buton on ribbon for existing mesage as well as for new message.
Currently I'm using below xml file

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="OnLoad">
<ribbon>
<tabs>
<tab idMso="TabNewMailMessage">
<group id="ClearV"
label="ClearV"<button id="Button1"
size="large"
label="Save And Send"
screentip="ClearV Save And Send"
onAction="OnButton1"
getEnabled="CallBackIsEnable"
imageMso="HappyFace"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

rbnComposeMail.vb -
Public Function GetCustomUI(ByVal ribbonID As String) As String
Implements Office.IRibbonExtensibility.GetCustomUI
If ribbonID = "Microsoft.Outlook.Mail.Compose" Then
Return GetResourceText
("Outlook_Add_In.rbnComposeMail.xml")
'ElseIf ribbonID = "Microsoft.Outlook.Mail.Read" Then
' Return GetResourceText("Outlook_Add_In.rbnReadMail.xml")
End If

End Function

What extra I need to add to have my custom button on ribbon for both
new message & existing message?

I also want to disable/Enable this button when opening message
depending on some condition.I tried with Callback function but this
button gets enabled/disabled only for the first time thereafter it
remains as it is i.e. not enables/disables dynamically.

thanks
 
You'll need to supply slightly different XML for a
"Microsoft.Outlook.Mail.Read" item, the tab is called "TabReadMessage" when
reading items.

To get your callbacks called again you need to call either the
InvalidateControl(controlID) method of the ribbon or the Invalidate()
method. Those can be called in the Inspector.Activate() event handler
depending on condition evaluation. InvalidateControl() fires the callbacks
for only that control, Invalidate() fires the callbacks for all of your
ribbon UI.
 
Thanks Ken
I tried below xml
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
onLoad="OnLoad">
<ribbon>
<tabs>
<tab idMso="TabReadMessage">
<group id="ClearV2"
label="ClearV2"<button id="Button2"
size="large"
label="ClearV2"
screentip="ClearV2 tip"
onAction="OnButton2"
getEnabled="CallBackIsEnable"
imageMso="HappyFace"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

I didn't get any error ,but my button was not displayed on Ribbon for
existing mail.What went wrong?
I'm using single vb file & 2 xml files -one for compose & other for
read.The vb file has below 2 functions
Public Function GetCustomUI(ByVal ribbonID As String) As String
Implements Office.IRibbonExtensibility.GetCustomUI
If ribbonID = "Microsoft.Outlook.Mail.Compose" Then
If gblnLicense = False Then Return Nothing
Return GetResourceText
("Clearv_Outlook_Add_In.rbnComposeMail.xml")
ElseIf ribbonID = "Microsoft.Outlook.Mail.Read" Then
Return GetResourceText
("Clearv_Outlook_Add_In.rbnReadMail.xml")
End If

End Function

Protected Overrides Function RequestService(ByVal serviceGuid As Guid)
As Object
If serviceGuid = GetType(Office.IRibbonExtensibility).GUID
Then
If ribbon Is Nothing Then
ribbon = New rbnComposeMail()
End If
Return ribbon
End If

Return MyBase.RequestService(serviceGuid)
End Function

Thanks again
 
No idea offhand. The XML looks valid for read emails and uses correct
syntax.

Do you have the UI setting made to show any errors in your ribbon? Check
Tools, Options, Other tab, Advanced Options button, check the "Show add-in
user interface errors".

Also make sure you are getting the callback for that ribbon XML when you
initially open a mail item for reading.
 
Back
Top