mirror of
https://github.com/ckaczor/azuredatastudio.git
synced 2026-02-14 12:08:36 -05:00
Agent/edit steps (#2846)
* steps can be now edited * edit jobs now works with steps, alerts, schedules etc * fixed bug when new step in new dialog would fail
This commit is contained in:
@@ -4,20 +4,22 @@
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
'use strict';
|
||||
|
||||
import * as sqlops from 'sqlops';
|
||||
import * as nls from 'vscode-nls';
|
||||
import * as vscode from 'vscode';
|
||||
import { AgentUtils } from '../agentUtils';
|
||||
import { IAgentDialogData, AgentDialogMode } from '../interfaces';
|
||||
import { JobData } from './jobData';
|
||||
import * as nls from 'vscode-nls';
|
||||
|
||||
const localize = nls.loadMessageBundle();
|
||||
|
||||
export class JobStepData implements IAgentDialogData {
|
||||
|
||||
// Error Messages
|
||||
private readonly CreateStepErrorMessage_JobNameIsEmpty = localize('stepData.jobNameRequired', 'Job name must be provided');
|
||||
private readonly CreateStepErrorMessage_StepNameIsEmpty = localize('stepData.stepNameRequired', 'Step name must be provided');
|
||||
private static readonly CreateStepErrorMessage_JobNameIsEmpty = localize('stepData.jobNameRequired', 'Job name must be provided');
|
||||
private static readonly CreateStepErrorMessage_StepNameIsEmpty = localize('stepData.stepNameRequired', 'Step name must be provided');
|
||||
|
||||
public dialogMode: AgentDialogMode = AgentDialogMode.CREATE;
|
||||
public dialogMode: AgentDialogMode;
|
||||
public ownerUri: string;
|
||||
public jobId: string;
|
||||
public jobName: string;
|
||||
@@ -28,8 +30,8 @@ export class JobStepData implements IAgentDialogData {
|
||||
public id: number;
|
||||
public failureAction: string;
|
||||
public successAction: string;
|
||||
public failStepId: number;
|
||||
public successStepId: number;
|
||||
public failStepId: number;
|
||||
public command: string;
|
||||
public commandExecutionSuccessCode: number;
|
||||
public databaseName: string;
|
||||
@@ -43,10 +45,12 @@ export class JobStepData implements IAgentDialogData {
|
||||
public retryAttempts: number;
|
||||
public retryInterval: number;
|
||||
public proxyName: string;
|
||||
private jobModel: JobData;
|
||||
|
||||
constructor(ownerUri:string, jobModel?: JobData) {
|
||||
this.ownerUri = ownerUri;
|
||||
this.jobName = jobModel.name;
|
||||
this.jobModel = jobModel;
|
||||
}
|
||||
|
||||
public async initialize() {
|
||||
@@ -54,47 +58,35 @@ export class JobStepData implements IAgentDialogData {
|
||||
|
||||
public async save() {
|
||||
let agentService = await AgentUtils.getAgentService();
|
||||
agentService.createJobStep(this.ownerUri, {
|
||||
jobId: this.jobId,
|
||||
jobName: this.jobName,
|
||||
script: this.script,
|
||||
scriptName: this.scriptName,
|
||||
stepName: this.stepName,
|
||||
subSystem: this.subSystem,
|
||||
id: this.id,
|
||||
failureAction: this.failureAction,
|
||||
successAction: this.successAction,
|
||||
failStepId: this.failStepId,
|
||||
successStepId: this.successStepId,
|
||||
command: this.command,
|
||||
commandExecutionSuccessCode: this.commandExecutionSuccessCode,
|
||||
databaseName: this.databaseName,
|
||||
databaseUserName: this.databaseUserName,
|
||||
server: this.server,
|
||||
outputFileName: this.outputFileName,
|
||||
appendToLogFile: this.appendToLogFile,
|
||||
appendToStepHist: this.appendToStepHist,
|
||||
writeLogToTable: this.writeLogToTable,
|
||||
appendLogToTable: this.appendLogToTable,
|
||||
retryAttempts: this.retryAttempts,
|
||||
retryInterval: this.retryInterval,
|
||||
proxyName: this.proxyName
|
||||
}).then(result => {
|
||||
if (result && result.success) {
|
||||
console.info(result);
|
||||
let result: any;
|
||||
if (this.dialogMode === AgentDialogMode.CREATE) {
|
||||
if (this.jobModel && this.jobModel.dialogMode === AgentDialogMode.CREATE) {
|
||||
// create job -> create step
|
||||
Promise.resolve(this);
|
||||
return;
|
||||
} else {
|
||||
// edit job -> create step
|
||||
result = await agentService.createJobStep(this.ownerUri, JobStepData.convertToAgentJobStepInfo(this));
|
||||
}
|
||||
});
|
||||
} else if (this.jobModel && this.jobModel.dialogMode === AgentDialogMode.EDIT) {
|
||||
// edit job -> edit step
|
||||
result = await agentService.updateJobStep(this.ownerUri, this.stepName, JobStepData.convertToAgentJobStepInfo(this));
|
||||
}
|
||||
if (!result || !result.success) {
|
||||
vscode.window.showErrorMessage(
|
||||
localize('jobStepData.saveErrorMessage', "Step update failed '{0}'", result.errorMessage ? result.errorMessage : 'Unknown'));
|
||||
}
|
||||
}
|
||||
|
||||
public validate(): { valid: boolean, errorMessages: string[] } {
|
||||
let validationErrors: string[] = [];
|
||||
|
||||
if (!(this.stepName && this.stepName.trim())) {
|
||||
validationErrors.push(this.CreateStepErrorMessage_StepNameIsEmpty);
|
||||
validationErrors.push(JobStepData.CreateStepErrorMessage_StepNameIsEmpty);
|
||||
}
|
||||
|
||||
if (!(this.jobName && this.jobName.trim())) {
|
||||
validationErrors.push(this.CreateStepErrorMessage_JobNameIsEmpty);
|
||||
validationErrors.push(JobStepData.CreateStepErrorMessage_JobNameIsEmpty);
|
||||
}
|
||||
|
||||
return {
|
||||
@@ -102,4 +94,66 @@ export class JobStepData implements IAgentDialogData {
|
||||
errorMessages: validationErrors
|
||||
};
|
||||
}
|
||||
|
||||
public static convertToJobStepData(jobStepInfo: sqlops.AgentJobStepInfo, jobData: JobData) {
|
||||
let stepData = new JobStepData(jobData.ownerUri, jobData);
|
||||
stepData.ownerUri = jobData.ownerUri;
|
||||
stepData.jobId = jobStepInfo.jobId;
|
||||
stepData.jobName = jobStepInfo.jobName;
|
||||
stepData.script = jobStepInfo.script;
|
||||
stepData.scriptName = jobStepInfo.scriptName,
|
||||
stepData.stepName = jobStepInfo.stepName,
|
||||
stepData.subSystem = jobStepInfo.subSystem,
|
||||
stepData.id = jobStepInfo.id,
|
||||
stepData.failureAction = jobStepInfo.failureAction,
|
||||
stepData.successAction = jobStepInfo.successAction,
|
||||
stepData.failStepId = jobStepInfo.failStepId,
|
||||
stepData.successStepId = jobStepInfo.successStepId,
|
||||
stepData.command = jobStepInfo.command,
|
||||
stepData.commandExecutionSuccessCode = jobStepInfo.commandExecutionSuccessCode,
|
||||
stepData.databaseName = jobStepInfo.databaseName,
|
||||
stepData.databaseUserName = jobStepInfo.databaseUserName,
|
||||
stepData.server = jobStepInfo.server,
|
||||
stepData.outputFileName = jobStepInfo.outputFileName,
|
||||
stepData.appendToLogFile = jobStepInfo.appendToLogFile,
|
||||
stepData.appendToStepHist = jobStepInfo.appendToStepHist,
|
||||
stepData.writeLogToTable = jobStepInfo.writeLogToTable,
|
||||
stepData.appendLogToTable = jobStepInfo.appendLogToTable,
|
||||
stepData.retryAttempts = jobStepInfo.retryAttempts,
|
||||
stepData.retryInterval = jobStepInfo.retryInterval,
|
||||
stepData.proxyName = jobStepInfo.proxyName;
|
||||
stepData.dialogMode = AgentDialogMode.EDIT;
|
||||
return stepData;
|
||||
}
|
||||
|
||||
public static convertToAgentJobStepInfo(jobStepData: JobStepData): sqlops.AgentJobStepInfo {
|
||||
let result: sqlops.AgentJobStepInfo = {
|
||||
jobId: jobStepData.jobId,
|
||||
jobName: jobStepData.jobName,
|
||||
script: jobStepData.script,
|
||||
scriptName: jobStepData.scriptName,
|
||||
stepName: jobStepData.stepName,
|
||||
subSystem: jobStepData.subSystem,
|
||||
id: jobStepData.id,
|
||||
failureAction: jobStepData.failureAction,
|
||||
successAction: jobStepData.successAction,
|
||||
failStepId: jobStepData.failStepId,
|
||||
successStepId: jobStepData.successStepId,
|
||||
command: jobStepData.command,
|
||||
commandExecutionSuccessCode: jobStepData.commandExecutionSuccessCode,
|
||||
databaseName: jobStepData.databaseName,
|
||||
databaseUserName: jobStepData.databaseUserName,
|
||||
server: jobStepData.server,
|
||||
outputFileName: jobStepData.outputFileName,
|
||||
appendToLogFile: jobStepData.appendToLogFile,
|
||||
appendToStepHist: jobStepData.appendToStepHist,
|
||||
writeLogToTable: jobStepData.writeLogToTable,
|
||||
appendLogToTable: jobStepData.appendLogToTable,
|
||||
retryAttempts: jobStepData.retryAttempts,
|
||||
retryInterval: jobStepData.retryInterval,
|
||||
proxyName: jobStepData.proxyName
|
||||
};
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user