Issue with rules related to people pickers

Home Forums Classic DFFS Issue with rules related to people pickers

Viewing 3 reply threads
  • Author
    Posts
    • #38197
      Travis Goodman
      Participant

        Hey Alex,

        In a list I still use classic on (which 90% of my DFFS is still on classic — I’m on v4.4.5.35) I’m having issues with rules that deal with people pickers not firing consistently.

        I have a rule that says If [PeoplePicker] is equal to [blank]

        When I say [blank] I mean I literally put no text or anything in the “This Value” section, I just leave it empty because I’m wanting to check if the field is empty or not.

        This works like 50% of the time, and it has to be related to the user profile entered into that field not validating on time. I’ve extended DFFS loading by 5000ms and it gets a little better, but still has issues. I’ve even had it delayed up to 10000ms and I can’t keep raising the delay.

        Is there a workaround for this?

      • #38198
        Alexander Bautz
        Keymaster

          Hi,
          Are you using a rule triggering on form load or on field change?

          It can be done using custom js so If you can give me some more details I can give you a code example.

          Alexander

        • #38203
          Travis Goodman
          Participant

            I have tried both onload only and onload and onchange. It’s not that it doesn’t work, because it does… just not consistently. The rule evaluates before the peoplepicker resolves. What I noticed is that onchange it doesn’t revalidate.

            Setup is the rule for PeoplePicker is equal to [blank] and then I don’t do anything with it at that point. What I do is I reference that in a Linked Rules and Functions section of other rules and I have the box checked so that a change in that rule will revalidate the parent rule. That’s where I’m seeing the inconsistent experience.

            • #38206
              Alexander Bautz
              Keymaster

                You can try using this Custom JS instead of using rules to detect the change on the PP.

                function peoplePickerChanged(fin){
                    var currPPvalue = spjs.dffs.beforeProperties[fin];
                    if(currPPvalue.length === 0){
                        console.log("The field is empty on form load");
                    }
                    setInterval(() => {
                        let val = getFieldValue(fin);
                        let isResolved = spjs.utility.getFieldValue({"fin": fin, "key": "isresolved"});
                        if(!isResolved.includes(false) && String(currPPvalue) !== String(val)){
                            currPPvalue = val;
                            console.log("Changed to", val);
                            if(val.length === 0){
                                console.log("Is empty");
                            }
                        }
                    },1000);
                }
                peoplePickerChanged("PeoplePicker1");
                

                Alexander

              • #38292
                Travis Goodman
                Participant

                  Thanks, I will try this. Just so you can see what I’m talking about, here’s an example. I have the delay load in the MISC tab set to 5000 ms and still you can see that the people pickers that get set to read only are showing blank, even though the actual field has people listed in them. Fields in this screenshot are Completed By and Employees.

                • #38294
                  Travis Goodman
                  Participant

                    Attached you will find the results of the console logs from your script. This is very interesting, and I cannot explain it. Notice that the logs never say “The field is empty on form load”. Rather, it’s saying that the fields are CHANGED to empty, and then seconds later, says they are changed to their current values. This is on Edit form. Those fields have values in them. When the form is loaded, they have values, I don’t know why it says they were changed to blank, and then just 1-2 seconds later says changed to what they actually are. Notice that DFFS load time tracker logs in between these actions. Something is off here, I can’t figure out what it is, but it’s a timing issue with something. There are no rules clearing these fields out.

                  • #38296
                    Travis Goodman
                    Participant

                      I got your script to work, this is what I came up with after tweaking it. Notice that I had to call the function for every peoplepicker. It works though.

                      ~~~~
                      function peoplePickerChanged(fin){
                      var currPPvalue = spjs.dffs.beforeProperties[fin];
                      console.log(currPPvalue);
                      if(currPPvalue.length === 0){
                      console.log(fin + ” field is empty on form load”);
                      spjs.dffs.hideFieldsByRule(fin);
                      }
                      setInterval(() => {
                      let val = getFieldValue(fin);
                      let isResolved = spjs.utility.getFieldValue({“fin”: fin, “key”: “isresolved”});
                      if(!isResolved.includes(false) && String(currPPvalue) !== String(val)){
                      currPPvalue = val;
                      console.log(currPPvalue);
                      console.log(fin + ” changed to”, val);
                      if(val.length === 0){
                      console.log(fin + “is empty”);
                      }
                      else {
                      spjs.dffs.doReadOnly(fin);
                      spjs.dffs.unhideFieldsByRule(fin);
                      }
                      }
                      },1000);
                      }
                      peoplePickerChanged([“Employees”]);
                      peoplePickerChanged([“Employee”]);
                      peoplePickerChanged([“NewAM”]);
                      peoplePickerChanged([“Manager”]);
                      peoplePickerChanged([“Agent_Name”]);
                      peoplePickerChanged([“CenterPOC”]);
                      peoplePickerChanged([“CurrentAM”]);
                      peoplePickerChanged([“NewManager”]);
                      peoplePickerChanged([“Center_Sales_Manager”]);
                      peoplePickerChanged([“NewDirector”]);
                      peoplePickerChanged([“CurrentManager”]);
                      peoplePickerChanged([“CurrentDirector”]);
                      peoplePickerChanged([“EmployeeTrade”]);
                      peoplePickerChanged([“TrainingPlacement”]);
                      peoplePickerChanged([“ApprovedByManager”]);
                      ~~~~

                  • #38305
                    Alexander Bautz
                    Keymaster

                      The people picker field loads async because it evaluates all entries to ensure they are valid choices. I assume that this process is slow for some reason.

                      I’m glad you figured out a solution.

                      Alexander

                  Viewing 3 reply threads
                  • You must be logged in to reply to this topic.