USP_BUSINESSPROCESSJOBSCHEDULE_ADD

Creates a SQL Server job for a business process.

Parameters

Parameter Parameter Type Mode Description
@JOBNAME nvarchar(100) IN
@DESCRIPTION nvarchar(1000) IN
@PROXYNAME nvarchar(128) IN
@COMMAND nvarchar(4000) IN
@CREATESCHEDULE bit IN
@ENABLESCHEDULE bit IN
@FREQENCYTYPE int IN
@FREQUENCYINTERVAL int IN
@FREQUENCYSUBDAYTYPE int IN
@FREQUENCYSUBDAYINTERVAL int IN
@FREQUENCYRELATIVEINTERVAL int IN
@FREQUENCYRECURRENCEFACTOR int IN
@ACTIVESTARTDATE char(8) IN
@ACTIVEENDDATE char(8) IN
@ACTIVESTARTTIME char(6) IN
@ACTIVEENDTIME char(6) IN
@SCHEDULEID int INOUT

Definition

Copy


CREATE procedure dbo.[USP_BUSINESSPROCESSJOBSCHEDULE_ADD]
(
  @JOBNAME nvarchar(100),
  @DESCRIPTION nvarchar(1000),
  @PROXYNAME nvarchar(128),
  @COMMAND nvarchar(4000),
  @CREATESCHEDULE bit = 0,
  @ENABLESCHEDULE bit = 1,
  @FREQENCYTYPE int = 0,
  @FREQUENCYINTERVAL int = 1,
  @FREQUENCYSUBDAYTYPE int = 0,
  @FREQUENCYSUBDAYINTERVAL int = 0,
  @FREQUENCYRELATIVEINTERVAL int = 0,
  @FREQUENCYRECURRENCEFACTOR int = 0,
  @ACTIVESTARTDATE char(8) = null,
  @ACTIVEENDDATE char(8) = null,
  @ACTIVESTARTTIME char(6) = null,
  @ACTIVEENDTIME char(6) = null,
  @SCHEDULEID integer = null output
)
as begin
  set nocount on;

  declare @OWNERNAME nvarchar(256) = suser_sname();
  declare @RESULT integer = 0;
  declare @JOBID binary(16);
  declare @SUCCESS bit = 1;

  declare @SUBSYS as nvarchar(40) = N'PowerShell';
  declare @STEPDBNAME as nvarchar(25);

  if @PROXYNAME like '% ActiveX %'
    begin
      set @SUBSYS = N'ActiveScripting';
      set @STEPDBNAME = N'VBScript';
    end

  begin transaction;

  if not exists (select name from msdb.dbo.syscategories where name = N'Blackbaud Business Process Jobs' and category_class = 1) begin
    exec @RESULT = msdb.dbo.sp_add_category
                     @class = N'JOB',
                     @type = N'LOCAL',
                     @name = N'Blackbaud Business Process Jobs';

    if @@ERROR <> 0 or @RESULT <> 0 set @SUCCESS = 0;
  end

  if @SUCCESS = 1 begin
    exec @RESULT =  msdb.dbo.sp_add_job
                      @job_name = @JOBNAME,
                      @enabled = 1,
                      @notify_level_eventlog = 0,
                      @notify_level_email = 0,
                      @notify_level_netsend = 0,
                      @notify_level_page = 0,
                      @delete_level = 0,
                      @description = @DESCRIPTION,
                      @category_name = N'Blackbaud Business Process Jobs',
                      @owner_login_name = @OWNERNAME,
                      @job_id = @JOBID output;

    if @@ERROR <> 0 or @RESULT <> 0 set @SUCCESS = 0;
  end

  if @SUCCESS = 1 begin
    exec @RESULT = msdb.dbo.sp_add_jobstep
                     @job_id = @JOBID,
                     @step_name = N'Business process invoke',
                     @step_id = 1,
                     @cmdexec_success_code = 0,
                     @on_success_action = 1,
                     @on_success_step_id = 0,
                     @on_fail_action = 2,
                     @on_fail_step_id = 0,
                     @retry_attempts = 0,
                     @retry_interval = 0,
                     @os_run_priority = 0,
                     @subsystem = @SUBSYS,
                     @command = @COMMAND,
                     @database_name = @STEPDBNAME,
                     @flags = 0,
                     @proxy_name = @PROXYNAME;

    if @@ERROR <> 0 or @RESULT <> 0 set @SUCCESS = 0;
  end

  if @SUCCESS = 1 begin
    exec @RESULT = msdb.dbo.sp_update_job
                     @job_id = @JOBID,
                     @start_step_id = 1;

    if @@ERROR <> 0 or @RESULT <> 0 set @SUCCESS = 0;
  end

  if @SUCCESS = 1 and @CREATESCHEDULE = 1 begin
    exec @RESULT = msdb.dbo.sp_add_jobschedule
                     @job_id = @JOBID,
                     @name = N'Business process schedule',
                     @enabled = @ENABLESCHEDULE,
                     @freq_type = @FREQENCYTYPE,
                     @freq_interval = @FREQUENCYINTERVAL,
                     @freq_subday_type = @FREQUENCYSUBDAYTYPE,
                     @freq_subday_interval = @FREQUENCYSUBDAYINTERVAL,
                     @freq_relative_interval = @FREQUENCYRELATIVEINTERVAL,
                     @freq_recurrence_factor = @FREQUENCYRECURRENCEFACTOR,
                     @active_start_date = @ACTIVESTARTDATE,
                     @active_end_date = @ACTIVEENDDATE,
                     @active_start_time = @ACTIVESTARTTIME,
                     @active_end_time = @ACTIVEENDTIME,
                     @schedule_id = @SCHEDULEID output;

    if @@ERROR <> 0 or @RESULT <> 0 set @SUCCESS = 0;
  end

  if @SUCCESS = 1 begin
    exec @RESULT = msdb.dbo.sp_add_jobserver
                     @job_id = @JOBID,
                     @server_name = N'(local)';

    if @@ERROR <> 0 or @RESULT <> 0 set @SUCCESS = 0;
  end

  if @SUCCESS = 1 begin
    commit transaction;
    return 0;
  end else begin
    if @@TRANCOUNT > 0 rollback transaction;
    return 1;
  end
end