Epicor placing "RS" special characters when copying

Just wondering if anyone has run into issues with Epicor placing “RS” special characters into their data when selecting “copy all”. Specifically in areas such as part descriptions.

According to our consultant we were running into issues with our Service Connect when we updated data through DMT that had these special characters in it.

I’ve ran into an issue similar to this before with RS characters in Part Descriptions.

Are your end users copying descriptions from websites when creating the Part records? That’s one way these characters can get introduced and it difficult to catch unless you paste the text string into a text editor before you add it to Epicor.

Its worth running a query to see if you have any parts in the database that contain these characters so you can clean them up before they fail in Service Connect.

Not sure if they’re copying it from a website, but I do believe they’re copying it from somewhere. Was there anything you did to prevent these from reoccurring? We ran a query to look for these, but it’ll be a large project to get everything cleaned up.

No, it was a pretty rare occurrence so they we’re addressed individually.

Maybe you can add a BPM to raise an exception when description like ‘%RS%’ at the time of Part creation if its the same RS character that keeps popping up. Just thinking out loud here but there may be better solutions.

I’ve seen this when copying from FileMaker Pro.

I would recommend a pre-update method directive that strips out non-printable characters like the record separator, etc.

2 Likes

I’ve seen BPM’s on Part Update that checks the part description field for those and simply removes them. Not worth throwing an exception and upsetting the user.

2 Likes
// Check for Invalid Characters in Part Descriptions when Add or Update.
// Characters extracted from Epicors Data Fix
List<char> badCharacters = new List<char>() { (char)0x01, (char)0x1a, (char)0x1f, (char)0x1c, (char)0x02, (char)0x17, (char)0x13, (char)0x1d, (char)0x11, (char)0x14, (char)0x1e };
char replacementCharacter = (char)32;

var ttPartRows = ttPart.Where(p => p.Added() || p.Updated()).ToList();

foreach (var ttPartRow in ttPartRows)
{
	ttPartRow.PartDescription = badCharacters.Aggregate(ttPartRow.PartDescription, (current, c) => current.Replace(c, replacementCharacter));
}
5 Likes

That’s anorher gem @hkeric.wci!

wow awesome, thanks for this!