USP_SEARCHLIST_CREATEORUPDATE_SP

Used by the platform SQLCLR to register a stored procedure based search list in the catalog

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier INOUT
@NAME nvarchar(60) IN
@DESCRIPTION nvarchar(1000) IN
@RECORDTYPE nvarchar(50) IN
@PROCEDURE nvarchar(128) IN
@FILTERDEFXML xml IN
@OUTPUTDEFXML xml IN
@SEARCHLISTSPECXML xml IN
@TRANSLATIONFUNCTIONID uniqueidentifier IN
@QUICKFINDFIELD nvarchar(100) IN
@CHANGEAGENTID uniqueidentifier IN
@SPECUINAME nvarchar(60) IN

Definition

Copy


CREATE procedure [dbo].[USP_SEARCHLIST_CREATEORUPDATE_SP]
(
    @ID uniqueidentifier = null output
    @NAME nvarchar(60),
    @DESCRIPTION nvarchar(1000) = '',
    @RECORDTYPE nvarchar(50),
    @PROCEDURE nvarchar(128),
    @FILTERDEFXML xml,
    @OUTPUTDEFXML xml,
    @SEARCHLISTSPECXML xml,
    @TRANSLATIONFUNCTIONID uniqueidentifier,
    @QUICKFINDFIELD nvarchar(100) = '',
    @CHANGEAGENTID uniqueidentifier = null,
    @SPECUINAME nvarchar(60) = N''
)
as

    -- this routine registers a stored procedure based search in the catalog

    set nocount on;

    declare @recTypeID uniqueidentifier;
    declare @objID int;
    declare @existingID uniqueidentifier;

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

    if @ID is null
        begin
          select @existingID = ID from dbo.SEARCHLISTCATALOG where NAME = @NAME;
          set @ID = @existingID;
        end
    else
        select @existingID = ID from dbo.SEARCHLISTCATALOG where ID = @ID;

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

    declare @martKey nvarchar(255);
    set @martKey = coalesce(@SEARCHLISTSPECXML.value('declare namespace tns="bb_appfx_searchlist";
                                                      /tns:SearchListSpec[1]/@MartKey
                                                      '
                                                      ,'nvarchar(255)')
                            ,'');

    if @martKey = ''
        begin
            select @objID = id from dbo.sysobjects where name = @PROCEDURE and type in ('P', 'PC');
            if @objID is null
                begin
                    raiserror ('Procedure ''%s'' does not exist or you do not have security access.', 16, 1, @PROCEDURE);
                    return 1;
                end

            declare @paramName nvarchar(128);
            select @paramName = PARAMETER_NAME 
                from INFORMATION_SCHEMA.PARAMETERS
                where (SPECIFIC_SCHEMA = 'dbo') and 
                      (SPECIFIC_NAME = @PROCEDURE) and 
                      (IS_RESULT = 'NO') and 
                      (PARAMETER_NAME = '@MAXROWS') and 
                      (DATA_TYPE = 'smallint');

            if @paramName is null
                begin
                    raiserror ('Procedure ''%s'' must have a @MAXROWS as smallint parameter defined.', 16, 1, @PROCEDURE);
                    return 2;
                end
        end

    declare @securityUIFolder nvarchar(255);
    set @securityUIFolder = coalesce(@SEARCHLISTSPECXML.value('declare namespace tns="bb_appfx_searchlist";
                                                               declare namespace c="bb_appfx_commontypes";
                                                               /tns:SearchListSpec[1]/@c:SecurityUIFolder
                                                               '
                                                               ,'nvarchar(255)')
                                    ,'');

    if @securityUIFolder is null
        set @securityUIFolder = '';

    --Add record type if it does not exist.        

    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.SEARCHLISTCATALOG (IMPLEMENTATIONTYPE, ID, [NAME], DESCRIPTION, ASSEMBLYNAME, CLASSNAME, PROCEDURENAME, RECORDTYPEID, FILTERFORMDEFINITION, OUTPUTDEFINITION, SEARCHLISTSPEC, TRANSLATIONFUNCTIONCATALOGID, QUICKFINDFIELD, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED, SECURITYUIFOLDER, SPECUINAME)
                values (0, @ID, @NAME, @DESCRIPTION, '', '', @PROCEDURE, @recTypeID, @FILTERDEFXML, @OUTPUTDEFXML, @SEARCHLISTSPECXML, @TRANSLATIONFUNCTIONID, @QUICKFINDFIELD, @CHANGEAGENTID, @CHANGEAGENTID, getdate(), getdate(), @securityUIFolder, @SPECUINAME)
        end

    else
        update dbo.SEARCHLISTCATALOG 
        set 
            IMPLEMENTATIONTYPE = 0,
            [NAME] = @NAME,
            DESCRIPTION = @DESCRIPTION,
            ASSEMBLYNAME = '',
            CLASSNAME = '',
            PROCEDURENAME = @PROCEDURE,
            RECORDTYPEID = @recTypeID,
            FILTERFORMDEFINITION = @FILTERDEFXML,
            OUTPUTDEFINITION = @OUTPUTDEFXML,
            STATICPARAMETERDEFINITION = null,
            SEARCHLISTSPEC = @SEARCHLISTSPECXML,
            TRANSLATIONFUNCTIONCATALOGID = @TRANSLATIONFUNCTIONID,
            QUICKFINDFIELD = @QUICKFINDFIELD,
            CHANGEDBYID = @CHANGEAGENTID,
            DATECHANGED = getdate(),
            SECURITYUIFOLDER = @securityUIFolder,
            SPECUINAME = @SPECUINAME
        where ID = @existingID

    if @@error <> 0 return 3;

return 0;