Search

Automation Controls Engineer (3rd Shift)

PublishedPublished: 11/10/2026
Electrical Engineer
|
${titleText}

`); // Reference to the newly injected grid where we will move the tokens let grid = columnOne.querySelector('.job-grid'); // 3. TOKEN GATHERING // SAP dynamically wraps tokens in different ways (.inner, .joblayouttoken, etc.). // We find all labels first, then traverse up the DOM to capture the full container for each. let labels = Array.from(columnOne.querySelectorAll('.joblayouttoken-label')); let allTokens = labels.map(label => label.closest('.inner') || label.closest('.joblayouttoken') || label.parentElement.parentElement); allTokens = [...new Set(allTokens)]; // Remove duplicates to prevent processing the same element twice // Variables to store extracted data for our business rules let jobLocationValue = ""; let countryRegionValue = ""; let regionValue = ""; let jobLevelValue = ""; let employeeGroupValue = ""; // 4. PHASE 1: DATA EXTRACTION (SILENT) // Loop through all tokens just to read their values. We do not move or alter them yet. allTokens.forEach(el => { if(!el) return; let labelEl = el.querySelector('.joblayouttoken-label'); if (!labelEl) return; let labelText = labelEl.innerText; // Use our helper function to normalize the label name regardless of the user's language let propId = generatePropertyId(labelText); let valueEl = el.querySelector('.rtltextaligneligible'); let valueText = valueEl ? valueEl.textContent.trim() : ""; // Populate the business rule variables based on the identified property ID if (propId === "JobLocation") jobLocationValue = valueText; else if (propId === "CountryRegion") countryRegionValue = valueText; else if (propId === "Region") regionValue = valueText; else if (propId === "JobLevel") jobLevelValue = valueText.toUpperCase().trim(); else if (propId === "EmployeeGroup") employeeGroupValue = valueText.toLowerCase(); }); // 5. DATA FALLBACK: JOB DESCRIPTION PARSING // If SAP failed to generate specific tokens, attempt to regex them directly out of the raw description text. let descDiv = document.querySelector('.job-description') || columnOne.querySelector('[itemprop="description"]'); if (descDiv) { let descText = descDiv.innerText || ""; if (!employeeGroupValue) { let eg = descText.match(/Employee Group:\s*([^\n\r]+)/i); if (eg) employeeGroupValue = eg[1].toLowerCase().trim(); } if (!countryRegionValue) { let cr = descText.match(/Country:\s*([^\n\r]+)/i); if (cr) countryRegionValue = cr[1].toLowerCase().trim(); } if (!regionValue) { let rg = descText.match(/Region:\s*([^\n\r]+)/i); if (rg) regionValue = rg[1].toLowerCase().trim(); } if (!jobLevelValue) { let jl = descText.match(/Job Level:\s*([^\n\r]+)/i); // Ensure we don't accidentally grab "Job Experience Level" if (jl && !jl[0].toLowerCase().includes("experience")) { jobLevelValue = jl[1].toUpperCase().trim(); } } } // 6. BUSINESS RULES EVALUATION (SALARY VISIBILITY) // Rule A: Is it a salaried position? let isSalaryPaid = employeeGroupValue.includes('salary'); // Rule B: Is the Job Level eligible? (Hide if PL09 or higher, or if ZZ) let isJobLevelSalaryEligible = true; let plMatch = jobLevelValue.match(/PL(\d+)/); if (jobLevelValue.includes("ZZ")) { isJobLevelSalaryEligible = false; } else if (plMatch && parseInt(plMatch[1], 10) >= 9) { isJobLevelSalaryEligible = false; } // Combine city/state and country to check geographic eligibility let fullLocationLower = (jobLocationValue + " " + countryRegionValue).toLowerCase(); let isUSJob = fullLocationLower.includes("usa") || fullLocationLower.includes("united states") || /\bus\b/.test(fullLocationLower); // Define specifically allowed locations for salary transparency compliance let allowedUSStates = ["massachusetts", "illinois", "colorado", "minnesota", "new york", "oregon", "ohio", "california", "washington", "nevada", "maryland", "new jersey"]; let allowedUSAbbr = ["ma", "il", "co", "mn", "ny", "or", "oh", "ca", "wa", "nv", "md", "nj", "wdc", "dc"]; let allowedGlobalCountries = ["canada"]; let isSalaryLocationValid = false; // Rule C: Is the location mandated to show salary? if (isUSJob) { isSalaryLocationValid = allowedUSStates.some(state => fullLocationLower.includes(state)) || allowedUSAbbr.some(abbr => new RegExp(`\\b${abbr}\\b`).test(fullLocationLower)); } else { isSalaryLocationValid = allowedGlobalCountries.some(country => fullLocationLower.includes(country)); } // Final Boolean: All three rules must pass to display the salary range token let showSalaryRange = isSalaryLocationValid && isJobLevelSalaryEligible && isSalaryPaid; // 7. PHASE 2: UI MANIPULATION & DOM INJECTION // Loop through all tokens again. This time, we apply styles, icons, and move them into the new grid. allTokens.forEach(el => { try { // Skip processing if this container accidentally holds the main job description if (!el || el.querySelector('[itemprop="description"]')) return; let labelEl = el.querySelector('.joblayouttoken-label'); if (!labelEl) return; let labelText = labelEl.innerText; let customPropertyid = generatePropertyId(labelText); // Hide utility tokens that were only needed for backend business logic calculations if (["EmployeeGroup", "CountryRegion", "Region", "JobLevel"].includes(customPropertyid)) { el.style.display = 'none'; return; } // Hide the salary token if it failed the business rule check if (customPropertyid === "SalaryRange" && !showSalaryRange) { el.style.display = 'none'; return; } // TEXT OVERRIDES: Force specific terminology on the frontend if (customPropertyid === "SalaryRange" && labelText.toLowerCase().includes("recruitment salary range")) { labelEl.innerText = labelText.replace(/Recruitment Salary Range/ig, "Annual Salary Range"); } // Cleanup messy abbreviations from SAP if (labelText.includes("(Short)")) { labelEl.innerText = labelText.replace(/\(Short\)/g, "(s)"); } // BRUTE FORCE STYLING: Override SAP's native CSS for the Labels labelEl.style.setProperty('font-weight', 'bold', 'important'); labelEl.style.setProperty('font-size', '14px', 'important'); labelEl.style.setProperty('color', '#303030', 'important'); labelEl.style.setProperty('font-family', 'Verdana, Geneva, sans-serif', 'important'); // BRUTE FORCE STYLING: Override SAP's native CSS for the Values let valueEl = el.querySelector('.rtltextaligneligible'); if (valueEl) { valueEl.style.setProperty('font-weight', 'normal', 'important'); valueEl.style.setProperty('font-size', '15px', 'important'); valueEl.style.setProperty('color', '#303030', 'important'); valueEl.style.setProperty('font-family', 'Verdana, Geneva, sans-serif', 'important'); } // ICON MAPPING: Assign specific Glyphicons or custom image URLs based on the token type let icon = ''; let iconUrl = ''; switch (customPropertyid) { case 'JobLocation': icon = 'glyphicon-map-marker'; break; case 'BusinessUnit': icon = 'glyphicon-briefcase'; break; case 'JobCategory': icon = 'glyphicon-dashboard'; break; case 'EmploymentType': icon = 'glyphicon-star-empty'; break; case 'ReqID': icon = 'glyphicon-calendar'; break; case 'WorkLocationType': icon = 'glyphicon-paste'; break; case 'JobExperienceLevel': iconUrl = 'https://rmkcdn.successfactors.com/ef55fddb/b4cf3492-3cb2-4e29-a914-3.png'; break; case 'SalaryRange': iconUrl = 'https://rmkcdn.successfactors.com/ef55fddb/3bd06ab1-e5dc-4e72-abcb-3.png'; break; case 'TAPartner': iconUrl = 'https://rmkcdn.successfactors.com/ef55fddb/66a66419-f8c9-4f0e-b94a-6.png'; break; } // Generate the HTML for the icon (either a span for a font-icon or an img tag) let iconHtml = ''; if (icon) { iconHtml = ``; } else if (iconUrl) { iconHtml = ``; } // SAFE DOM MANIPULATION // Wrap the existing token and the new icon inside a flexible flexbox row container. // We use DOM traversal (previousElementSibling) to avoid using dynamic ID queries which can fail if SAP injects weird characters. let containerToWrap = labelEl.parentElement; if(containerToWrap) { containerToWrap.insertAdjacentHTML('beforebegin', `
${iconHtml}`); let wrapper = containerToWrap.previousElementSibling; if(wrapper) { wrapper.appendChild(containerToWrap); // Clean up residual text nodes (like line breaks) to prevent unwanted spacing in the layout let nextNode = wrapper.nextSibling; if(nextNode && nextNode.nodeType === 3) nextNode.remove(); } } // Finally, move the fully formatted token element into our custom green grid grid.appendChild(el); } catch (err) { // If a specific token is malformed by SAP, log the error but allow the loop to continue formatting the rest of the tokens console.error("Erro ao processar o token:", err); } }); // 8. FINAL CLEANUP // Remove the raw text strings from the bottom of the job description that were used as data fallbacks if (descDiv) { let descHtml = descDiv.innerHTML; descHtml = descHtml.replace(/Employee Group:[\s\S]*?(?=
arr.some(keyword => normalized.includes(keyword)); if (contains(["employee group"])) return "EmployeeGroup"; if (contains(["country", "land", "país", "pays", "paese", "kraj", "krajina"])) return "CountryRegion"; if (contains(["region", "región", "région", "регион", "地区"])) return "Region"; if (contains(["posting job location", "job location", "joblokation", "jobsted", "arbeitsort", "ubicación", "site de l'emploi", "lokalizacja", "местоположение", "miesto", "职位地点", "sede di lavoro"])) return "JobLocation"; if (contains(["salary range", "annual recruitment salary", "løninterval", "gehaltsspanne", "przedział wynagrodzenia", "fourchette", "rango salarial", "mzdové rozpätie", "lønramme", "диапазон зарплаты"])) return "SalaryRange"; if (contains(["job experience level", "erfaringsniveau", "erfahrungsniveau", "poziom doświadczenia", "expérience professionnelle", "experiência"])) return "JobExperienceLevel"; if (contains(["posting job level", "job level", "jobniveau", "joblevel", "nivel del puesto", "niveau du poste", "poziom stanowiska", "уровень должности", "úroveň pozície"])) return "JobLevel"; if (contains(["employment type", "ansættelse", "beschäftigungsart", "tipo de emprego", "type d'emploi", "rodzaj zatrudnienia", "тип занятости", "typ pracovného pomeru", "员工类型", "tipologia di impiego", "tipo de empleo"])) return "EmploymentType"; if (contains(["work location type", "arbejdsstedstype", "arbeitsmodell", "tipo de ubicacion", "emplacement de travail", "miejsca pracy", "формат работы", "výkonu práce", "工作地点类型", "modalità di lavoro"])) return "WorkLocationType"; if (contains(["job category", "jobkategori", "stellenkategorie", "categoría", "catégorie", "kategoria", "категория должности", "kategória", "职位类别", "area professionale"])) return "JobCategory"; if (contains(["business unit", "segment", "segmento", "firmaenhed", "unternehmenseinheit", "jednostka biznesowa", "сегмент", "业务板块"])) return "BusinessUnit"; if (contains(["req id", "rek-id", "kennung", "id de solicitud", "identifiant de la demande", "identyfikator", "идентификатор", "id pracovní pozície", "需求 id", "identifikačné", "id posizione", "requisition id", "stellen-id"])) return "ReqID"; if (contains(["ta partner", "partenaire ta"])) return "TAPartner"; // Fallback: If no match, strip spaces and punctuation to create a camelCase-style ID return jobLayoutTokenLabel.replace(/[\s:\(\)\]\[]/g,'');}

The Impact You'll Make

As an Automation Controls Engineer, you will serve as a key technical resource supporting our manufacturing operations in Tallahassee, Florida. In this role, you will help ensure the reliability, performance, and continuous improvement of critical manufacturing equipment through preventive maintenance, troubleshooting, and automation enhancements.

Your work will directly contribute to operational excellence, product quality, safety, and manufacturing efficiency.

Success in this role means identifying opportunities for improvement, implementing automation and controls solutions, and helping maintain a safe, productive, and reliable manufacturing environment.

What You'll Be Doing

  • You will play a critical role in improving equipment performance and manufacturing processes by:
  • Designing, programming, modifying, and supporting PLC and HMI systems to improve equipment reliability and operational efficiency.
  • Troubleshooting and resolving electrical, electronic, mechanical, and automation-related issues to minimize downtime and maintain production continuity.
  • Supporting the integration and connectivity of manufacturing equipment with PLCs, MES systems, and shop-floor technologies.
  • Leading and implementing continuous improvement initiatives focused on safety, quality, productivity, ergonomics, and equipment performance.
  • Developing and maintaining technical documentation, user manuals, specifications, and support materials for manufacturing equipment and processes.

What We're Looking For

  • Bachelor's degree in Software Engineering, Mechanical Engineering, Industrial Engineering, or a related engineering discipline.
  • 3+ years of experience in controls engineering, automation, manufacturing engineering, or a similar technical role.
  • Experience programming, troubleshooting, and supporting PLC-based automation systems.
  • Strong problem-solving skills with the ability to diagnose and resolve complex equipment and process issues.
  • Ability to work effectively in a collaborative, cross-functional manufacturing environment while maintaining a strong focus on safety and quality.

    Preferred Qualifications
  • Refrigeration manufacturing or industrial refrigeration experience.
  • Knowledge of CNC equipment and machine tooling systems.
  • Lean Manufacturing, Lean Six Sigma, or continuous improvement methodologies.

What You'll Get from Us

  • You'll help engineer a better future by contributing to solutions that make a real difference around the world.
  • This role offers the opportunity to work on a wide range of automation technologies, drive meaningful manufacturing improvements, and influence equipment reliability and operational performance across the facility.
  • We'll support your career growth with mentoring, learning opportunities, and access to global career paths.
  • You'll have the flexibility, autonomy, and support you need to do your best work while maintaining a healthy work-life balance.
  • You'll be part of an inclusive workplace where people of all backgrounds are respected, valued, and empowered to succeed.
  • You'll receive a competitive rewards package that includes benefits such as an annual bonus, paid vacation, pension plans, health insurance, and more. As a global company, these benefits vary by country and contract.

Ready to Make a Difference?

If this role excites you, we'd love to hear from you! Apply now to start the conversation and learn more about where your career can go with us.

Our Commitment to Transparency

Salary ranges listed reflect only primary location and currency. For local salary ranges and specific benefits in your preferred hiring location, please ask your Talent Acquisition representative for more information.

The actual salary offer will carefully consider a wide range of factors, including your skills, qualifications, experience, and location. Any benefits listed do not promise or guarantee any particular benefit or specific action. They may depend on country or contract specifics and are subject to change at any time without prior notice.

Want to know more? Please visit our FAQ Page.

All qualified applicants will receive consideration for employment without regard to race, color, religion, sex, sexual orientation, gender identity, national origin, age, disability, veteran status, or other protected category.

Employee Group: Salary Paid

Country: United States

Region: NAM

Information at a Glance