Get all People Fields into Multi Person on Save

Hi,

This should be easy, hopefully!
I'm getting all the People Fields in a form and putting them in a Multi Person Field.
Seven people, null values are filtered.

I just can't get it run on form save.

//Get all Team Members on Save
fd.beforeSave(function(spForm) {
   var Members = [fd.field('Team2').value, fd.field('Team3').value, fd.field('Team4').value, 
   fd.field('Team5').value, fd.field('Team6').value, fd.field('Team7').value, fd.field('Team8').value];
   var Team = Members.filter(TeamFilter);

   fd.field('TeamMembers').value = Team;
   return fd._vue.$nextTick();
    
//Filter out null Team Members
function TeamFilter(Members) {
   return Members !== null;
   }
});

Thanks for any help. I've been using forms for about two weeks. So still getting the hang of it. :grinning:

Adam

Hello @AdamSmith,

The code is correct except for one significant thing. There is no beforeSave event, you need to run code under spBeforeSave event.

Please find more information about events that can be executed from JavaScript editor for Plumsail Forms here.

I've updated your code, please try it out.

fd.spBeforeSave(function(spForm) {
   var Members = [fd.field('Team2').value, fd.field('Team3').value, fd.field('Team4').value, 
   fd.field('Team5').value, fd.field('Team6').value, fd.field('Team7').value, fd.field('Team8').value];
   var Team = Members.filter(TeamFilter);

   fd.field('TeamMembers').value = Team;
   return fd._vue.$nextTick();
    
//Filter out null Team Members
function TeamFilter(Members) {
   return Members !== null;
   }
});

Thanks @mnikitina, I was confused about SharePoint Forms vs Plumsail Forms.
It's actually a SharePoint Form made in Plumsail Forms App.

The code is running on save.
However, it's not populating the column.

No Team Members
image

So, I Iogged the variables to check.

//Get all Team Members on save
fd.spBeforeSave(function(spForm) {                                                     
      console.log("Before Save Ran") 
      var Members = [fd.field('Team2').value, fd.field('Team3').value, fd.field('Team4').value, 
      fd.field('Team5').value, fd.field('Team6').value, fd.field('Team7').value, fd.field('Team8').value]; 
      console.log("Team", Members)                                            
      var Team = Members.filter(TeamFilter);                                     
      console.log("Filtered Team", Team)                                     
                                                                                                   
      fd.field('TeamMembers').value = Team;                                                   
      return fd._vue.$nextTick();                                                                
                                                                                                                
      //Filter out null Team Members                                                        
      function TeamFilter(Members) {                                                                 
      return Members !== null;                                                                                                                  
      }                                                                                                                                                      
  });

Console Log shows it's all running fine

image

It works if triggered prior to save.
I'm thinking maybe there needs to be a delay for the people field values to validate?

Adam

@AdamSmith,

There seems to be an issue with setting person field on spBeforeSave. We will investigate the issue.

And for now, you can use the below code.

fd.spRendered(function() {
    for (let i = 2; i <= 8; i++) {
        fd.field('Team' + i).$on('change', setTeam);
    }

    function setTeam() {
        console.log('setTeam ran');
        let team = [];
        for (let i = 2; i <= 8; i++) {
            const value = fd.field('Team' + i).value;
            if(value){
                team.push(value.Key);
            }
        }
        console.log('Filtered Team', team);
        fd.field('TeamMembers').value = team;
    }
});
1 Like

@mnikitina, what an elegant solution!

Thank You :grinning:

1 Like