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