List event handler in CRM 2013 - dynamics-crm

The CRM 201X SDK provides methods to add and remove event handlers on many events like form load, field on change etc.
My question is: Is it possible to get a list of all events registered at runtime?
Let's say I want to remove all onSave handlers from a form (but I don't have a pointer to them as they may originated from other scripts). Can I do that?

Related

Add information message when reading email

I would like to display an information message for the user when he read a specific email (i.e the email is tagged as external). The message should be displayed in the same way as outlook categories.
I know that I can use Exchange transport rule to achieve that but my client don't want to modify the message itself. He prefers displaying a message in the UI without changing the email body. The other option is to use the Office.context.mailbox.item.notificationMessages interface but as I told, I don't want to modify the email item if possible.
Do you think it is doable with outlook JS addins ?
My need is similar to this one for VSTO addin: How can my Outlook VSTO Add-in modify the read email form?
The Office.context.mailbox.item.notificationMessages interface provides the addAsync method which accepts the JSONMessage parameter which represents a JSON object that contains the notification message to be added to the item. It contains a NotificationMessageDetails object. Among properties you can find the persistent property which specifies if the message should be persistent. Only applicable when type is InformationalMessage. If true, the message remains until removed by this add-in or dismissed by the user. If false, it is removed when the user navigates to a different item. For error notifications, the message persists until the user sees it once. Specifying this parameter for an unsupported type throws an exception.
In case of categories, the message will be modified.
Do you know if it's possible to execute the function as soon as the read form is opened without having to click on an action button ?
Web add-ins are run under the context of currently selected item only. You can pin a task pane, then you'll be able to register an event handler to get notified of the change. The event handler should accept a single parameter, which is an object literal. The type property of this object will be set to Office.EventType.ItemChanged. When the event is called, the Office.context.mailbox.item object is already updated to reflect the currently selected item.
Office.initialize = function (reason) {
$(document).ready(function () {
// Set up ItemChanged event
Office.context.mailbox.addHandlerAsync(Office.EventType.ItemChanged, itemChanged);
});
};
function itemChanged(eventArgs) {
// Update on the new current item
}
Currently the event-based activation of add-in in Read mode is not supported. We track Outlook add-in feature requests on our Tech Community Page. Please submit your request there and choose the appropriate label(s). Feature requests on Tech Community are considered when we go through our planning process.
Currently, Event-based of activation of add-ins is only supported for Compose mode. You can explore more here- Configure your Outlook add-in for event-based activation - Office Add-ins | Microsoft Docs

Dismissing Outlook reminders triggers MS Graph API event change notification and ChangeKey change, any way to avoid?

My app keeps track of users' calendar events via Microsoft Graph API. My database records each synced event's ChangeKey, which helps my app determine whether a event has changed and should be processed by business logic.
I also subscribe to the change notification API so that my app doesn't have to poll often.
What I found out lately is that whenever the user dismisses an event's "reminder" via Outlook (via the Outlook reminder popup), which is a very common thing to do as Outlook puts all calendar events on reminders automatically, the Graph API would send out change notification on that event.
That would have been fine – except that the event's ChangeKey actually changes, even though nothing material about the event has changed (date times/subject/body etc). Since my app uses the ChangeKey property to compare events, the business logic triggers unnecessarily.
Is this normal behavior and doesn't that nullify the practical purpose of ChangeKey? Is there any workaround other than giving up the use of this property, and instead manually check for the equality of each meaningful field for event equality?

prevent outlook from deleting recurring event

I have a plugin which syncs read-only shared calendars in Outlook with our collaboration system. I need to make sure the user cannot delete any appointments in these read-only calendars. It's possible to attach an event handler to any appointment in Outlook (this works) but it won't work for recurring events. Each occurrence in the recurrence pattern is a separate object in Outlook, and the app must attach an event handler to each of such objects. If the recurrence pattern is endless (which is quite popular for such appointments), the app should attach infinite number of event handlers.
Is it possible to attach an event handler to some of kind of a grouping object (if such entity exists) for all occurrences at once, or is there any other method of solving my task?
When an instance of a recurring appointment is deleted, the master appointment will be modified. You can intercept that change by subscribing to the AppointmentItem.Write event, whcih has the Cancel parameter.

Using a Workflow to auto-populate a form field upon creation in CRM 2011

I would like to have a field automatically be populated with something I define in a workflow. Currently I have the workflow running upon record creation, however the field is only populated AFTER the user saves the record for the first time.
How can I use a workflow to populate that field before the user saves the form?
You can't. Workflows function on the server-side, but you're asking about populating a client-side field before the server is contacted. Moreover, workflows are triggered asynchronously, which by definition means the record has to be created in advance.
You'll need to either attach a JavaScript function to the OnSave event, or trigger the population of the field in a pre-validation or pre-operation .NET plugin. I suppose you could use a Dialog as well, but that would require user input. See the below links for more detail on the differences between plugins, workflows, and dialogs.
Options: Plugin, Workflow or Dialog
Automate Business Processes in Microsoft Dynamics CRM

Callbacks from MS Dynamics CRM to a webservice

We're building a system that is tightly integrated with a clients CRM install, and need to have a callback fired when an entity is updated, created or deleted. This callback will ideally send the entity name and id to an external service via a HTTP get request.
I've not found any docs online that help - can anyone point me in the right direction?
You're looking for plugins: http://msdn.microsoft.com/en-us/library/dd393295.aspx.
You can register a plugin on Create, Update, Delete, etc. of an entity, and then run any custom code you'd like. You'll definitely have access to the entity name and the id, as well as fields that were updated, information on the user who initiated the call, etc.
Just know that in MSCRM 3.0 & 4.0, plugins run outside the actual database transaction, so it's possible the event could fire in CRM, but the plugin fails and the event still goes through. In MSCRM 2011, they run inside the transaction, and can stop the CRM event from happening if need be.

Resources