none
HR data with two possible joins to the Metaverse RRS feed

  • Question

  • I have an interesting scenario that has developed due to a recent acquisition.  The issue is that the company i work for was acquired by another company.  We are a Healthcare organization and one of our requirements is that we do not delete accounts.  If someone quits and returns months or years later they are to use the same account.  This works well when our HR department rehires them they use the same employeeid for that person and we can join to the MV object and AD via like employeeid's in those systems.

    Enter the new problem.  The lawyers have decided that all employees that were not employed at the time of the acquisition will need to be hired as new employees and not rehires.  Thus giving them a new employeeID.  This creates a problem because we are not able to join to the existing accounts with this new employeeid.  One of the ideas was that HR can pass along to us the old employeeID along with the new EmployeeID.  I did some testing on this and was able to create a rules extenstion that has both old and new employeeids passed.  If the old employeeid exists it tries to join on that number and this does work to join the object correctly.  What I was expecting to happen was that the EmployeeID (which is flowed inbound via Sync Rule NewEmployeeid -> Employeeid) get updated in the MV and then AD and will stay joined since new employeeid still matches what was updated in the MV and AD. 

    What I found is that the MV attribute for EmployeeID keeps the old employeeid used for the join despite the HR Inbound sync rule to flow the new employeeID.  Is it possible to update the MV object EmployeeID in the rules extension for the join?  Any other ideas?

    Thanks all.

    Kirk

    Here is the code in my rules extension for my HR MA:

    		void IMASynchronization.MapAttributesForJoin (string FlowRuleName, CSEntry csentry, ref ValueCollection values)
            {
                switch (FlowRuleName)
    			{
    				case "EMPLOYEEID":
    					if (csentry["OLDEMPLOYEEID"].IsPresent)
                        {
                            values.Add(csentry["OLDEMPLOYEEID"].StringValue);
                        }
                        else
                        {
                            values.Add(csentry["EMPLOYEEID"].StringValue);
                        }
                        break;
                        throw new EntryPointNotImplementedException();
    
    				default:
    					// TODO: remove the following statement and add your default script here
    					throw new EntryPointNotImplementedException();
    			}
            }

    Wednesday, October 31, 2012 4:29 PM

Answers

  • MapAttributes for Join is an object level function.
    You can't use this method to flow attribute value.
    Flowing attribute values is subject of the attribute flow rules.

    Cheers,
    Markus


    Markus Vilcinskas, Knowledge Engineer, Microsoft Corporation

    Wednesday, November 7, 2012 7:36 PM

All replies

  • Okay, I just finished a meeting with my HR department and have dodged a bullet.  Instead of flowing a whole new attribute for OLDEMPLOYEEID, they are going to add a "9" infront of the current 5 character EmployeeID this making it 6 characters.  I updated my rules extension to check if EMPLOYEEID is 6 characters, then if the first is a 9 and if so, contribute the employeeid with the 9 stripped off.

    updated rules extension below.

    void IMASynchronization.MapAttributesForJoin (string FlowRuleName, CSEntry csentry, ref ValueCollection values)
            {
                switch (FlowRuleName)
    			{
    				case "EMPLOYEEID":
                        if (csentry["EMPLOYEEID"].StringValue.Length == 6)
                        {
                            if (csentry["EMPLOYEEID"].StringValue.Substring(0, 1) == "9")
                            {
                                values.Add(csentry["EMPLOYEEID"].StringValue.Substring(1));
                            }
                            else
                            {
                                values.Add(csentry["EMPLOYEEID"].StringValue);
                            }
                        }
                        else
                        {
                            values.Add(csentry["EMPLOYEEID"].StringValue);
                        }
    
                        break;
                        throw new EntryPointNotImplementedException();
    
    				default:
    					// TODO: remove the following statement and add your default script here
    					throw new EntryPointNotImplementedException();
    			}
            }


    Wednesday, October 31, 2012 8:05 PM
  • MapAttributes for Join is an object level function.
    You can't use this method to flow attribute value.
    Flowing attribute values is subject of the attribute flow rules.

    Cheers,
    Markus


    Markus Vilcinskas, Knowledge Engineer, Microsoft Corporation

    Wednesday, November 7, 2012 7:36 PM