Home › Forums › Classic DFFS › Check out feature triggering workflows
- This topic has 6 replies, 3 voices, and was last updated 3 years, 10 months ago by Alexander Bautz.
-
AuthorPosts
-
-
August 2, 2019 at 16:10 #26474
Hi Alex,
I have a list I am trying to use the check out feature for and came across an issue. When the item is being checked out it is triggering workflows and causing save conflicts. Is there a way to disable the workflow trigger on check out? Or is there a way to delay the refresh of the item until workflows are finished?
-
August 2, 2019 at 17:53 #26487
There is unfortunately no way to prevent the WF from triggering from DFFS, but you could edit the WF and configure it to exit if the CheckedOut field is checked – effectively only triggering the WF when the item is checked in again.
If you need to delay the load to wait for the WF you can use this trigger: https://spjsblog.com/dffs/dffs-user-manual/#Workflow_status_BETA
Use it for example to call a custom function like this in your Custom JS:
function customReloadPage(){ spjs.dffs.alert({ "title": "Checking workflow status", "msg":"<div style='font-size:16px;padding:10px;'>The workflow hasn't finished yet. Hit OK to pause for 10 seconds and do a new check.</div>", "ok":function(){ spjs.dffs.alert({ "title": "Checking workflow status", "msg":"<div id='customReloadMsg' style='font-size:16px;padding:10px;'></div>", "noBtn":true }); runTicker(); }, "cancel": function(){ location.href = location.href.split(/editform.aspx/i).join("DispForm.aspx"); } }); } function runTicker(){ var ticker = 10; setInterval(function(){ jQuery("#customReloadMsg").html("Doing a new check in "+ticker+" seconds..."); ticker -= 1; },1000); setTimeout(function(){ location.href = location.href; // looks strange, but reloads the form cleanly },10000); }
Alexander
-
August 2, 2019 at 18:25 #26495
Thanks I’ll give this a shot!
-
February 9, 2021 at 01:54 #32746
Alexander,
I have a requirement to start a SPD WF based on changes in an OOTB multi-value lookup field. The WF would then manipulate other fields in that list (no email requirement). Is it possible for DFFS to compare a field pre-and post-edit (seems possible with some rules or Custom JS) and then trigger a SPD WF to run?
Thanks
MikeS-
February 9, 2021 at 20:07 #32752
I wrote about this some years ago. See if you can get this to work from a button: https://spjsblog.com/2016/03/03/dffs-start-sp2013-workflow-from-a-button-in-a-list-item/
If you do, you can compare current value and last saved value like this:
var currValue = getFieldValue("TheFieldName"); var lastSavedValue = spjs.dffs.beforeProperties.TheFieldName; if(currValue !== lastSavedValue){ // Has changed }
Please note that the code to trigger the workflow is async so you cannot just run it in PreSaveAction – the form will save and close before it has finished.
Alexander
-
-
February 9, 2021 at 20:36 #32756
I did review that 2016 post during my research on your site. However, I was hoping there might be a way for DFFS to compare the last saved and current field values and then launch the SPD WF without user interaction when the form was saved – if the last saved and current values differ.
Alternatively, it appears that the combination of your 2016 article with the script:
var currValue = getFieldValue("TheFieldName"); var lastSavedValue = spjs.dffs.beforeProperties.TheFieldName; if(currValue !== lastSavedValue){ // Has changed }
would trigger the WF upon pressing the button ONLY if the field has been changed. How would I combine this short script with the larger 2016 script – at the start?
Thanks
MikeS -
February 9, 2021 at 21:24 #32761
You just call the function like show at the bottom of the 2016 article – getting the “onclick” attribute like this:
spjs.workflow.initListItemWF('ab064e56-926c-477b-910e-0d3759f5b956');
You could try adding the code I send to the dffs_PreSaveAction function like this:
var wfTriggered = false; function dffs_PreSaveAction(){ var currValue = getFieldValue("TheFieldName"); var lastSavedValue = spjs.dffs.beforeProperties.TheFieldName; if(currValue !== lastSavedValue && !wfTriggered){ // Has changed and the WF has not been triggered wfTriggered = true; spjs.workflow.initListItemWF('ab064e56-926c-477b-910e-0d3759f5b956'); return false; // Stop the save and wait until the wf has been triggered }else{ return true; // Saving the item } }
Now you must add a callback to the 2016 wf function here (in the middle of the function):
... ... spjs.workflow.closeDlg(); SP.UI.Notify.addNotification(spjs.workflow.text.successMessage,false); // New line to trigger save of the list item spjs.dffs.triggerSave(); ... ...
I have not tested this so it might still need some tweaking.
Alexander
-
-
AuthorPosts
- You must be logged in to reply to this topic.