I have been working on a number of projects for my customers and recently, dialogs have taken front and center stage. The Office.context.ui Dialogs are powerful, albeit a tad confusing and the documentation suffers from a few easily missed points. Here is the documentation:
But in this post, I hope to explain everything I have learned. To start off with here is the code to issue the dialog:
[code lang=”javascript” collapse=”true” title=”click to expand if the embedding below is not visible.”]
Office.context.ui.displayDialogAsync(‘https://localhost:3000/function-file/dialog.html’,
{ height: 20, width: 30, displayInIframe: true },
function (asyncResult) {
dialog = asyncResult.value;
// callbacks from the parent
dialog.addEventHandler(Office.EventType.DialogEventReceived, processMessage);
dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage);
});
[/code]
| Office.context.ui.displayDialogAsync('https://localhost:3000/function-file/dialog.html', | |
| { height: 20, width: 30, displayInIframe: true }, | |
| function (asyncResult) { | |
| dialog = asyncResult.value; | |
| // callbacks from the parent | |
| dialog.addEventHandler(Office.EventType.DialogEventReceived, processMessage); | |
| dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage); | |
| }); |
What this dialog does is opens as a modal form in a frame over the application (in Office Web Apps). It looks like this:

As you can see the dialog is modal. But what is really important are the two event handlers you need to register to be able to get back to your code:
[code lang=”javascript”]
dialog.addEventHandler(Office.EventType.DialogEventReceived, processMessage);
dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage);
[/code]
| 12006 | The dialog box was closed, usually because the user chooses the X button. |
[code lang=”javascript”]
Office.context.ui.messageParent(‘{message}’);
[/code]
[code lang=”javascript”]
// close the dialog
dialog.close();
[/code]
[code lang=”javascript” collapse=”true” title=”click to expand if the embedding below is not visible.”]
function processMessage(arg) {
// close the dialog
dialog.close();
// procress the result
if(arg.error == 12006) {
// user clicked the (X) on the dialog
sendEvent.completed({ allowEvent: false });
} else {
if(arg.message=="Yes") {
// user clicked yes
sendEvent.completed({ allowEvent: true });
} else {
// user clicked no
sendEvent.completed({ allowEvent: false });
}
}
}
[/code]
| function processMessage(arg) { | |
| // close the dialog | |
| dialog.close(); | |
| // procress the result | |
| if(arg.error == 12006) { | |
| // user clicked the (X) on the dialog | |
| sendEvent.completed({ allowEvent: false }); | |
| } else { | |
| if(arg.message=="Yes") { | |
| // user clicked yes | |
| sendEvent.completed({ allowEvent: true }); | |
| } else { | |
| // user clicked no | |
| sendEvent.completed({ allowEvent: false }); | |
| } | |
| } | |
| } |














