Working with MultiSelect Lists

From Starfish ETL
Revision as of 15:22, 30 May 2019 by Msheehan (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This is example is for SugarCRM, where MultiSelect fields are supplied as a JSON string, i.e. [{"value1","value2"}

First, I check to make sure my origin value ('reg') and existing value in Sugar ('existing') are not empty, as either case is easy to resolve.

if (string.IsNullOrEmpty(reg))
	{
		//Starfish.LogMessage("reg is empty");
		result = existing;
	}
	else if (string.IsNullOrEmpty(existing))
	{
		//Starfish.LogMessage("existing is empty");
		result = "[\""+reg+"\"]";
	}

Next, I check to see if the origin value is already selected in the existing Sugar value.

else if (existing.Contains(reg))
	{
		//Starfish.LogMessage("existing already contains reg");
		result = existing;
	}

Now that all of the easy cases are out of the way, I deal with the case where I need to add the origin value to the existing Sugar value. In order for the data to be consistent for reporting, after adding the value, I convert the JSON string to an array, sort it, then convert it back to JSON format.

else
	{
		//Starfish.LogMessage("Need to add reg to existing value");
		existing = existing.Replace(System.Environment.NewLine, "");
		existing = existing.Replace(" ","");
		string combined = existing.Replace("]","")+",\""+reg+"\"";
		combined = combined.Replace("[","");
		string[] combinedArray = combined.Split(',');
		Array.Sort(combinedArray);
		
		
		for (int j = 0; j <= combinedArray.GetUpperBound(0); j++)
		{
			//Starfish.LogMessage(combinedArray[j]+" ");
			result = result + combinedArray[j] + ",";

		}
		result = result.TrimEnd(',');
		result = "["+result+"]";
	}