When I first thought of this question, I assumed it would be easy to find answered online, but I can't seem to find it posed anywhere.
It's part development, part administrative in nature, so please read the description fully before answering.
If a workflow timer that causes a field update simply assigns a value back to the field (e.g. Lead.Title = Lead.Title) for the "update", will the update triggers associated with the object still fire? (It seems the answer is no, and the same is true if you just add whitespace to the existing value). If not, what is the least non-invasive way for me to force a non-impactful change that will cause the update trigger to fire when triggered from a timer workflow?
In our org, we have 6 checkboxes handling different communication opt out selections. I wanted to condense all of these checkboxes into a multi-selection picklist. I'm aware of the limitations of using this field type, and it still seemed a good option for the project.
However, I was informed I couldn't just transfer the checkbox values to the picklist, for a few reasons which I solved with adding statements to the trigger, with only this last issue remaining:
One of the checkboxes represents a "30 day hold" on email communications, and has a "timer" workflow associated with it that unchecks the box after 30 days have passed since it was first checked. I can't redirect this workflow to update the multi-selection picklist because apparently field updates to multi-selection picklists caused by workflows aren't allowed (even though changes in these types of fields can be the catalyst for a field update).
So instead I added statements in the trigger to create and then select a dynamic label on the multi-selection picklist ("Email Hold - 30 Days - insert timestamp") when the static label "Email Hold" is selected from the list on insert or update. I figure if I can get the timer workflow to start ticking down when the static value is selected, then "update" the record when the timer runs out, the trigger will then check the dynamic label on update and if the timestamp on it proves thirty days have passed, it will remove the hold.
Right now, everything works perfectly except I can't seem to force an update without making a major change to the record via the workflow. As an example - I set the workflow to fire off a task insert associated with the record, and that properly forced the trigger to fire, but as mentioned earlier, I tried adding whitespace to the Title field on lead, and that did not work.