diff --git a/src/Microsoft.SqlTools.ServiceLayer/Agent/AgentService.cs b/src/Microsoft.SqlTools.ServiceLayer/Agent/AgentService.cs index 1a81ace4..21bd80cc 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Agent/AgentService.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Agent/AgentService.cs @@ -92,6 +92,8 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent this.ServiceHost.SetRequestHandler(UpdateAgentJobRequest.Type, HandleUpdateAgentJobRequest); this.ServiceHost.SetRequestHandler(DeleteAgentJobRequest.Type, HandleDeleteAgentJobRequest); + this.ServiceHost.SetRequestHandler(AgentJobDefaultsRequest.Type, HandleAgentJobDefaultsRequest); + // Job Steps request handlers this.ServiceHost.SetRequestHandler(CreateAgentJobStepRequest.Type, HandleCreateAgentJobStepRequest); this.ServiceHost.SetRequestHandler(UpdateAgentJobStepRequest.Type, HandleUpdateAgentJobStepRequest); @@ -357,7 +359,44 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent Success = result.Item1, ErrorMessage = result.Item2 }); - } + } + + internal async Task HandleAgentJobDefaultsRequest(AgentJobDefaultsParams parameters, RequestContext requestContext) + { + await Task.Run(async () => + { + var result = new AgentJobDefaultsResult(); + try + { + JobData jobData; + CDataContainer dataContainer; + CreateJobData(parameters.OwnerUri, "default", out dataContainer, out jobData); + + // current connection user name for + result.Owner = dataContainer.ServerConnection.TrueLogin; + + var categories = jobData.Categories; + result.Categories = new AgentJobCategory[categories.Length]; + for (int i = 0; i < categories.Length; ++i) + { + result.Categories[i] = new AgentJobCategory + { + Id = categories[i].SmoCategory.ID, + Name = categories[i].SmoCategory.Name + }; + } + + result.Success = true; + } + catch (Exception ex) + { + result.Success = false; + result.ErrorMessage = ex.ToString(); + } + + await requestContext.SendResult(result); + }); + } #endregion // "Jobs Handlers" diff --git a/src/Microsoft.SqlTools.ServiceLayer/Agent/Common/AgentActions.cs b/src/Microsoft.SqlTools.ServiceLayer/Agent/Common/AgentActions.cs index efc4772b..04cf4efa 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Agent/Common/AgentActions.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Agent/Common/AgentActions.cs @@ -4,19 +4,17 @@ // using System; -using System.Data; -using System.Drawing; -using System.Threading; using System.Collections; using System.Collections.Specialized; using System.ComponentModel; +using System.Data; +using System.Threading; using System.Xml; using Microsoft.SqlServer.Management.Sdk.Sfc; using Microsoft.SqlServer.Management.Common; using Microsoft.SqlServer.Management.Diagnostics; using Microsoft.SqlServer.Management.Smo; using Microsoft.SqlServer.Management.Smo.Agent; -using Microsoft.SqlServer.Management.UI; using Microsoft.SqlTools.ServiceLayer.Admin; using Microsoft.SqlTools.ServiceLayer.Management; diff --git a/src/Microsoft.SqlTools.ServiceLayer/Agent/Contracts/AgentJobRequest.cs b/src/Microsoft.SqlTools.ServiceLayer/Agent/Contracts/AgentJobRequest.cs index 2bc39083..f5bee563 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Agent/Contracts/AgentJobRequest.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Agent/Contracts/AgentJobRequest.cs @@ -102,7 +102,7 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent.Contracts public static readonly RequestType Type = RequestType.Create("agent/updatejob"); - } + } /// /// SQL Agent delete Alert params @@ -182,4 +182,45 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent.Contracts RequestType Type = RequestType.Create("agent/jobaction"); } + + /// + /// SQL Agent Job Defaults params + /// + public class AgentJobDefaultsParams + { + public string OwnerUri { get; set; } + } + + /// + /// SQL Agent Job Category class + /// + public class AgentJobCategory + { + public int Id { get; set; } + + public string Name { get; set; } + } + + /// + /// SQL Agent Job Defaults result + /// + public class AgentJobDefaultsResult : ResultStatus + { + public string Owner { get; set; } + + public AgentJobCategory[] Categories { get; set; } + } + + /// + /// SQL Agent Job Defaults request type + /// + public class AgentJobDefaultsRequest + { + /// + /// Request definition + /// + public static readonly + RequestType Type = + RequestType.Create("agent/jobdefaults"); + } } diff --git a/src/Microsoft.SqlTools.ServiceLayer/Agent/Jobs/LocalizableCategory.cs b/src/Microsoft.SqlTools.ServiceLayer/Agent/Jobs/LocalizableCategory.cs index 7147cb8e..ad66c9e7 100644 --- a/src/Microsoft.SqlTools.ServiceLayer/Agent/Jobs/LocalizableCategory.cs +++ b/src/Microsoft.SqlTools.ServiceLayer/Agent/Jobs/LocalizableCategory.cs @@ -58,68 +58,68 @@ namespace Microsoft.SqlTools.ServiceLayer.Agent switch (categoryId) { case 0: - localisableCategory = "LocalizableCategorySR.CategoryLocal"; + localisableCategory = SR.CategoryLocal; break; case 1: - localisableCategory = "LocalizableCategorySR.CategoryFromMsx"; + localisableCategory = SR.CategoryFromMsx; break; case 2: - localisableCategory = "LocalizableCategorySR.CategoryMultiServer"; + localisableCategory = SR.CategoryMultiServer; break; case 3: - localisableCategory = "LocalizableCategorySR.CategoryDBMaint"; + localisableCategory = SR.CategoryDBMaint; break; case 4: - localisableCategory = "LocalizableCategorySR.CategoryWebAssistant"; + localisableCategory = SR.CategoryWebAssistant; break; case 5: - localisableCategory = "LocalizableCategorySR.CategoryFullText"; + localisableCategory = SR.CategoryFullText; break; case 6: - localisableCategory = "LocalizableCategorySR.CategoryLogShipping"; + localisableCategory = "Log Shippings"; // SR.CategoryLogShippings; break; case 7: - localisableCategory = "LocalizableCategorySR.CategoryDBEngineTuningAdvisor"; + localisableCategory = SR.CategoryDBEngineTuningAdvisor; break; case 8: - localisableCategory = "LocalizableCategorySR.CategoryDataCollector"; + localisableCategory = SR.CategoryDataCollector; break; case 10: - localisableCategory = "LocalizableCategorySR.CategoryReplDistribution"; + localisableCategory = SR.CategoryReplDistribution; break; case 11: - localisableCategory = "LocalizableCategorySR.CategoryReplDistributionCleanup"; + localisableCategory = SR.CategoryReplDistributionCleanup; break; case 12: - localisableCategory = "LocalizableCategorySR.CategoryReplHistoryCleanup"; + localisableCategory = SR.CategoryReplHistoryCleanup; break; case 13: - localisableCategory = "LocalizableCategorySR.CategoryReplLogReader"; + localisableCategory = SR.CategoryReplLogReader; break; case 14: - localisableCategory = "LocalizableCategorySR.CategoryReplMerge"; + localisableCategory = SR.CategoryReplMerge; break; case 15: - localisableCategory = "LocalizableCategorySR.CategoryReplSnapShot"; + localisableCategory = SR.CategoryReplSnapShot; break; case 16: - localisableCategory = "LocalizableCategorySR.CategoryReplCheckup"; + localisableCategory = SR.CategoryReplCheckup; break; case 17: - localisableCategory = "LocalizableCategorySR.CategoryReplCleanup"; + localisableCategory = SR.CategoryReplCleanup; break; case 18: - localisableCategory = "LocalizableCategorySR.CategoryReplAlert"; + localisableCategory = SR.CategoryReplAlert; break; case 19: - localisableCategory = "LocalizableCategorySR.CategoryReplQReader"; + localisableCategory = SR.CategoryReplQReader; break; case 20: - localisableCategory = "LocalizableCategorySR.CategoryReplication"; + localisableCategory = SR.CategoryReplication; break; case 98: case 99: - localisableCategory = "LocalizableCategorySR.CategoryUncategorized"; + localisableCategory = SR.CategoryUncategorized; break; default: localisableCategory = defaultName; diff --git a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Agent/AgentJobTests.cs b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Agent/AgentJobTests.cs index 63730bc0..069a57f2 100644 --- a/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Agent/AgentJobTests.cs +++ b/test/Microsoft.SqlTools.ServiceLayer.IntegrationTests/Agent/AgentJobTests.cs @@ -81,6 +81,28 @@ namespace Microsoft.SqlTools.ServiceLayer.IntegrationTests.Agent // test await AgentTestUtils.DeleteAgentJob(service, connectionResult, job, verify: false); } - } + } + + /// + /// TestAgentJobDefaultsRequest + /// + [Fact] + public async Task TestAgentJobDefaultsRequest() + { + using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile()) + { + // setup + var service = new AgentService(); + var connectionResult = await LiveConnectionHelper.InitLiveConnectionInfoAsync("master", queryTempFile.FilePath); + + // test + var context = new Mock>(); + await service.HandleAgentJobDefaultsRequest(new AgentJobDefaultsParams + { + OwnerUri = connectionResult.ConnectionInfo.OwnerUri + }, context.Object); + context.VerifyAll(); + } + } } }