Setting the UPA Incremental Timer Job to Hourly Results in “No Schedule Set”

If you set the User Profile Services’ Incremental Timer Job to run more frequently than “Daily”, the User Profile Service Application will indicate “No Schedule Set”:

image3

This is because the code that reviews the timer job doesn’t take into account the Incremental job running more often than daily.

public static string GetScheduleString(UserProfileApplicationJob job)
{
    string str = Microsoft.SharePoint.Portal.WebControls.StringResourceManager.GetString(LocStringId.ProfileAdminMain_ProfImp_Schedule_LinkText_Text); //"No Schedule Set"
    try
    {
        using (ServerApplication.BeginSecurityContext())
        {
            if ((job == null) || job.IsDisabled)
            {
                return Microsoft.SharePoint.Portal.WebControls.StringResourceManager.GetString(LocStringId.ProfileAdminMain_ProfImp_Schedule_Disable_Text);
            }
            if (!(job.Schedule is SPOneTimeSchedule))
            {
                if (job.Schedule is SPMonthlySchedule)
                {
                    SPMonthlySchedule schedule = job.Schedule as SPMonthlySchedule;
                    DateTime dateTimeForSchedule = ScheduledJobHelper.GetDateTimeForSchedule(schedule.BeginDay, schedule.BeginHour);
                    return string.Format(CultureInfo.CurrentCulture, Microsoft.SharePoint.Portal.WebControls.StringResourceManager.GetString(LocStringId.Schedule_Monthly_Text), new object[] { dateTimeForSchedule.Day.ToString(CultureInfo.InvariantCulture), GetHourFormattedString(dateTimeForSchedule.Hour) });
                }
                if (job.Schedule is SPWeeklySchedule)
                {
                    SPWeeklySchedule schedule2 = job.Schedule as SPWeeklySchedule;
                    DateTime time2 = ScheduledJobHelper.GetDateTimeForSchedule(schedule2.BeginDayOfWeek, schedule2.BeginHour);
                    return string.Format(CultureInfo.CurrentCulture, Microsoft.SharePoint.Portal.WebControls.StringResourceManager.GetString(LocStringId.Schedule_Weekly_Text), new object[] { GetDayOfWeek(time2.DayOfWeek), GetHourFormattedString(time2.Hour) });
                }
                if (job.Schedule is SPDailySchedule)
                {
                    SPDailySchedule schedule3 = job.Schedule as SPDailySchedule;
                    DateTime time3 = ScheduledJobHelper.GetDateTimeForSchedule(schedule3.BeginHour);
                    str = string.Format(CultureInfo.CurrentCulture, Microsoft.SharePoint.Portal.WebControls.StringResourceManager.GetString(LocStringId.Schedule_Daily_Text), new object[] { GetHourFormattedString(time3.Hour) });
                }
            }
            return str;

While I don’t believe this will impact the job running more than once a day, it will impact the display of the schedule on the User Profile Service Application page. Depending on the size of the organization, other jobs running, and performance issues with the Synchronization database, it is probably unwise to run the User Profile Incremental Synchronization timer job more than once per day.

Trevor Seward is a Microsoft Office Apps and Services MVP who specializes in SharePoint Server administration, hybrid scenarios, and SharePoint Online. He has been working with SharePoint for 16 years from SharePoint 2003 on up, managing environments with terabytes of content for 150,000+ user organizations. Trevor is an author of Deploying SharePoint 2016 and Deploying SharePoint 2019. You can find him on Twitter and in /r/sharepoint.