USP_RECORDOPERATION_CREATEORUPDATE_CLR

Used by the platform SQLCLR to register a clr-based record operation in the catalog

Parameters

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

Definition

Copy


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

    --this routine registers a CLR based record operation in the catalog


    set nocount on;

    declare @RecTypeID uniqueidentifier;
    declare @ExistingID uniqueidentifier;

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

    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;

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

    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)'),'');

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

  --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;

    if @ExistingID is null 

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

            insert into dbo.RECORDOPERATIONCATALOG (ID, DISPLAYNAME, DESCRIPTION, STATICPARAMETERDEFINITION, RECORDOPERATIONSPECXML, IMPLEMENTATIONTYPE, ASSEMBLYNAME, CLASSNAME, RECORDTYPEID, OPERATIONTYPE, TIMEOUTSECONDS, ADDEDBYID, CHANGEDBYID, SECURITYUIFOLDER, DATEADDED, DATECHANGED, SPECUINAME)
                    values (@ID, @NAME, @DESCRIPTION, @STATICPARAMETERDEFINITION, @RECORDOPERATIONSPECXML, 1, @ASSEMBLYNAME, @CLASSNAME, @RecTypeID, @OPERATIONTYPE, @TIMEOUTSECONDS, @CHANGEAGENTID, @CHANGEAGENTID, @SECURITYUIFOLDER, @CURRENTDATE, @CURRENTDATE, @SPECUINAME);
        end

    else

        update dbo.RECORDOPERATIONCATALOG 
            set DISPLAYNAME = @NAME,
            DESCRIPTION = @DESCRIPTION,
            STATICPARAMETERDEFINITION = @STATICPARAMETERDEFINITION,
            RECORDOPERATIONSPECXML = @RECORDOPERATIONSPECXML,
            IMPLEMENTATIONTYPE = 1,
            ASSEMBLYNAME = @ASSEMBLYNAME,
            CLASSNAME = @CLASSNAME,
            OPERATIONTYPE = @OPERATIONTYPE,
            TIMEOUTSECONDS = @TIMEOUTSECONDS,
            CHANGEDBYID = @CHANGEAGENTID,
            SECURITYUIFOLDER = @SECURITYUIFOLDER,
            DATECHANGED = @CURRENTDATE,
            RECORDTYPEID = @RecTypeID,
            SPECUINAME = @SPECUINAME
        where ID = @ExistingID;

    if @@error <> 0 return 1;

    return 0;