USP_RECORDOPERATION_CREATEORUPDATE

Used by the platform SQLCLR to register a stored procedure based record operation in the catalog

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@NAME nvarchar(60) IN
@RECORDOPERATIONSPECXML xml IN
@EXCEPTIONSXML xml IN
@PROCEDURE nvarchar(128) IN
@RECORDTYPE nvarchar(50) IN
@OPERATIONTYPE tinyint IN
@DESCRIPTION nvarchar(1000) IN
@TIMEOUTSECONDS int IN
@CHANGEAGENTID uniqueidentifier IN
@SPECUINAME nvarchar(60) IN

Definition

Copy


CREATE procedure [dbo].[USP_RECORDOPERATION_CREATEORUPDATE]
  @ID uniqueidentifier = null output,
  @NAME nvarchar(60),
  @RECORDOPERATIONSPECXML xml,
  @EXCEPTIONSXML xml = '',
  @PROCEDURE nvarchar(128),
  @RECORDTYPE nvarchar(50) = '',
  @OPERATIONTYPE tinyint = 0,
  @DESCRIPTION nvarchar(1000) = '',
  @TIMEOUTSECONDS int,
  @CHANGEAGENTID uniqueidentifier = null,
  @SPECUINAME nvarchar(60) = N''
as begin

  set nocount on;

  declare @ExistingID uniqueidentifier;
  declare @OBJID int;
  declare @PROMPTOBJID int;
  declare @ParamName nvarchar(128);
  declare @RecTypeID uniqueidentifier;


  if @SPECUINAME is null
    set @SPECUINAME = N'';

  if @ID is null begin
    select @ExistingID = ID from dbo.RECORDOPERATIONCATALOG where DISPLAYNAME = @NAME;
    set @ID = @ExistingID;
  end else
    select @ExistingID = ID from dbo.RECORDOPERATIONCATALOG where ID = @ID;



  if @CHANGEAGENTID is null
    exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output;


  declare @HASID bit;
  set @HASID=
    coalesce(
           @RECORDOPERATIONSPECXML.value(
                                   '
                                   declare namespace bbfa="bb_appfx_recordoperation";
                                   /bbfa:RecordOperationSpec[1]/@HasID
                                   '
                                   ,'bit')
           ,1);

  -- make sure this is a valid procedure

  select @OBJID = id from dbo.sysobjects where type in ('P', 'PC') and name = @PROCEDURE;

  if @OBJID is null begin

    raiserror ('Procedure ''%s'' does not exist or you do not have security access.', 16, 1, @PROCEDURE);

    return 1;
  end


  --make sure there is an ID param if HasID is true

  if @HASID = 1
  begin
    set @ParamName = null;
    select @ParamName = [name] from sys.parameters where object_id = @OBJID and [name] = '@ID'; -- (pdg ID does not have to be uniqueidentifier)  and [system_type_id] = 36;


    if @ParamName is null begin
      raiserror ('Procedure ''%s'' must have an @ID parameter.', 16, 1, @PROCEDURE);
      return 2;
    end
  end

  -- make sure there is a CHANGEAGENT param

  set @ParamName = null
  select @ParamName = [name] from sys.parameters where object_id = @OBJID and [name] = '@CHANGEAGENTID' and [system_type_id] = 36;

  if @ParamName is null begin
    raiserror ('Procedure ''%s'' must have an @CHANGEAGENTID parameter as uniqueidentifier.', 16, 1, @PROCEDURE);
    return 2;
  end


  declare @SECURITYUIFOLDER nvarchar(255);
  set @SECURITYUIFOLDER=
    coalesce(
           @RECORDOPERATIONSPECXML.value(
                                   '
                                   declare namespace bbfa="bb_appfx_recordoperation";
                                   declare namespace c="bb_appfx_commontypes";
                                   /bbfa:RecordOperationSpec[1]/@c:SecurityUIFolder
                                   '
                                   ,'nvarchar(255)')
           ,'');


  -- TMV 03/09/2007 Record type may change during an update, moved this out of the if..else

  --Add record type if it does not exist and a record type has been specified.

  if @HASID = 1
    exec dbo.USP_RECORDTYPE_GETID_OR_CREATE_FROMNAME @NAME=@RECORDTYPE,@CHANGEAGENTID=@CHANGEAGENTID,@RECORDTYPEID=@RecTypeID output;


  declare @CURRENTDATE datetime;
  set @CURRENTDATE = getdate();

  if @ExistingID is null begin
    if @ID is null
      set @ID = NewID();


    insert into dbo.RECORDOPERATIONCATALOG (ID, DISPLAYNAME, DESCRIPTION, RECORDOPERATIONSPECXML, EXCEPTIONSXML, RECORDTYPEID, OPERATIONTYPE, IMPLEMENTATIONTYPE, PROCEDURENAME, TIMEOUTSECONDS, ADDEDBYID, CHANGEDBYID,SECURITYUIFOLDER, DATEADDED, DATECHANGED, SPECUINAME)
    values (@ID, @NAME, @DESCRIPTION, @RECORDOPERATIONSPECXML,     @EXCEPTIONSXML, @RecTypeID, @OPERATIONTYPE, 0, @PROCEDURE, @TIMEOUTSECONDS, @CHANGEAGENTID, @CHANGEAGENTID,@SECURITYUIFOLDER, @CURRENTDATE, @CURRENTDATE, @SPECUINAME);


  end else begin

    update dbo.RECORDOPERATIONCATALOG set
      DISPLAYNAME = @NAME,
      DESCRIPTION = @DESCRIPTION,

      STATICPARAMETERDEFINITION = null,
      RECORDOPERATIONSPECXML = @RECORDOPERATIONSPECXML,

      EXCEPTIONSXML = @EXCEPTIONSXML,

      RECORDTYPEID = @RecTypeID,
      IMPLEMENTATIONTYPE = 0,
      PROCEDURENAME = @PROCEDURE,
      OPERATIONTYPE = @OPERATIONTYPE,
      TIMEOUTSECONDS = @TIMEOUTSECONDS,
      CHANGEDBYID = @CHANGEAGENTID,
      SECURITYUIFOLDER=@SECURITYUIFOLDER,
      DATECHANGED = @CURRENTDATE,
      SPECUINAME = @SPECUINAME

    where
      ID = @ExistingID;
  end
end