Scenario:
- Notify specific users upon the change of any field in an infopath form excluding a limited number of fields.
- InfoPath Full Trust Form
- SharePoint designer Workflows
I’ve seen lots of people ask for this, with a lot of the same general response:
it’s not really possible to maintain field-specific change history, or field-specific alerting
I think that Solution 2 below could address this.
Solution 1:
set up rules on every field in the form to set “NotifyParticipatns” to 1 on change.
Pros:
- No code required
Cons:
- Lots of rules and room for error
Solution 2:
Global event listener for all xml fields. Note the XPath selector used for registering the Changed event handler:
"/my:myFields/*"
Conditional for which fields should be included / excluded from the alert.
Set the “NotifyParticipants” based on conditional result.
public void InternalStartup()
{
EventManager.FormEvents.Loading += new LoadingEventHandler(FormEvents_Loading);
EventManager.XmlEvents["/my:myFields/*"].Changed += new XmlChangedEventHandler(Form_Changed);
}
<br data-mce-bogus="1">
public void Form_Changed(object sender, XmlEventArgs e)
{
// Write your code here to change the main data source.
List<string> AlertableFields = new List<string>();
string ModifiedField = e.Site.Name.ToString();
AlertableFields.Add("my:Street");
if( AlertableFields.Contains(ModifiedField))
{
Debug.WriteLine("Alerting on " + ModifiedField );
}
else{
Debug.WriteLine("Not alerting on " + ModifiedField );
}
}
Pros:
- Much cleaner solution
Cons:
- Code.
- Full Trust