2
votes

Imagine, you want to add an email to a case. The email form opens and the "To" field is auto-populated with the case's customer account.

I want to change the behavior in order to auto-populate the content of "To" with a custom property of the related case.

My first approach was to register a JavaScript for the OnLoad event of the form and let the script change the field. That would work, but I am wondering if there is a smarter way to achieve this. There is already some logic, which fills the "To" field. Is it possible to configure this existing feature?

Any hints are appreciated.

3
@downvoter: What is wrong with the question?Stephan

3 Answers

2
votes

I do not believe that this specific scenario can be done more effectively than how you've already worked it out. I would've suggested looking at the data mappings (left-nav item when you pop open the relationship in the entity's customizations, same concept as discussed in this Dynamics CRM 4.0 article http://www.dynamicscare.com/blog/index.php/modifying-mapping-behavior-between-parent-child-records-in-microsoft-dynamics-crm/), but it does not appear to be applicable to this relationship.

1
votes

This might help you:

           DataService.EntityReference toEntityRef = new DataService.EntityReference();
            toEntityRef.LogicalName = "contact";
            toEntityRef.Id = Guid.Parse(to_id);
            Entity toParty = new Entity();
            toParty["partyid"] = toEntityRef;
            toParty.LogicalName = "activityparty";
            Entity emailEntity = new Entity();
            emailEntity.LogicalName = "email";
            EntityCollection toCollection = new EntityCollection();
            toCollection.Entities = new ObservableCollection<Entity>();
            toCollection.Entities.Add(toParty);
            emailEntity["to"] = toCollection;
           IOrganizationService soapService = ServerUtility.GetSoapService();
           IAsyncResult res = soapService.BeginCreate(emailEntity, OnCreateComplete, soapService);

Call Back method:

    private void OnCreateComplete(IAsyncResult result)
    {                 
             Guid emailId = (IOrganizationService)result.AsyncState).EndCreate(result);
    }
0
votes

Another approach would be to replace the Add Email buttons in the ribbon in order to call a custom JavaScript function. This function could open the mail window with window.open and initialize the To: field by setting the extraqs parameter to configure an ActivityParty for the email about to create. This can be done by setting:

  • partyid to the id of an allowed entity's instance
  • partyname to the name of the entity instance
  • partytype to 2 (for the recipent field, see here for details)

But the extraqs parameter is limited: You can set only one receiver and no other field (from, cc, bcc, ...). Moreover, replacing the buttons would bypass built-in functionality, which may change in future versions,

So I prefer the handling of the OnLoad event of the form.