USP_ADHOCQUERY_CREATEORUPDATEDEFINITION

Create or update ad-hoc query definition

Parameters

Parameter Parameter Type Mode Description
@ID uniqueidentifier IN
@QUERYVIEWCATALOGID uniqueidentifier IN
@NAME nvarchar(255) IN
@DESCRIPTION nvarchar(1024) IN
@QUERYDEFINITIONXML xml IN
@QUERYCATEGORYCODEID uniqueidentifier IN
@DATAFORMINSTANCEID uniqueidentifier IN
@OTHERSCANMODIFY bit IN
@APPUSERID uniqueidentifier IN
@CHANGEAGENTID uniqueidentifier IN
@SITEID uniqueidentifier IN
@FOLDERID uniqueidentifier IN
@SECURITYLEVEL tinyint IN
@PERMISSIONEDROLES xml IN
@SECURITYLEVELEDIT tinyint IN
@PERMISSIONEDROLESEDIT xml IN
@MOBILIZE bit IN
@ISFAVORITE bit IN

Definition

Copy


CREATE procedure [dbo].[USP_ADHOCQUERY_CREATEORUPDATEDEFINITION]
(
    @ID uniqueidentifier,
    @QUERYVIEWCATALOGID uniqueidentifier,
    @NAME nvarchar(255),
    @DESCRIPTION nvarchar(1024),
    @QUERYDEFINITIONXML xml,
    @QUERYCATEGORYCODEID uniqueidentifier,
    @DATAFORMINSTANCEID uniqueidentifier,
    @OTHERSCANMODIFY bit,
    @APPUSERID uniqueidentifier,
    @CHANGEAGENTID uniqueidentifier,
    @SITEID uniqueidentifier = null,
    @FOLDERID uniqueidentifier = null,
    @SECURITYLEVEL tinyint = null,
    @PERMISSIONEDROLES xml = null,
    @SECURITYLEVELEDIT tinyint = null,
    @PERMISSIONEDROLESEDIT xml = null,
    @MOBILIZE bit = null,
    @ISFAVORITE bit = null
)
as

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

declare @EXISTINGID uniqueidentifier;

if @QUERYCATEGORYCODEID = cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)
    set @QUERYCATEGORYCODEID = null;

if @DATAFORMINSTANCEID = cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)
    set @DATAFORMINSTANCEID = null;

if @FOLDERID = cast('00000000-0000-0000-0000-000000000000' as uniqueidentifier)
    set @FOLDERID = null;

set @SECURITYLEVEL = coalesce(@SECURITYLEVEL, 0)
set @SECURITYLEVELEDIT = coalesce(@SECURITYLEVELEDIT, 0)

select @EXISTINGID = ADHOCQUERY.ID
from dbo.ADHOCQUERY 
where ADHOCQUERY.ID = @ID;

declare @ISBROWSABLE bit;
select
    @ISBROWSABLE = dbo.UFN_ADHOCQUERY_ISBROWSABLE(@QUERYDEFINITIONXML, OBJECTNAME, PRIMARYKEYFIELD)
from
    dbo.QUERYVIEWCATALOG
where
    ID = @QUERYVIEWCATALOGID

declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()

if @EXISTINGID is null
begin
    insert into dbo.ADHOCQUERY
    (
        ID, 
        QUERYVIEWCATALOGID, 
        NAME, 
        DESCRIPTION, 
        QUERYDEFINITIONXML, 
        QUERYCATEGORYCODEID, 
        DATAFORMINSTANCEID, 
        OTHERSCANMODIFY, 
        OWNERID, 
        SITEID, 
        FOLDERID, 
        SECURITYLEVEL,
        SECURITYLEVELEDIT,
        MOBILIZE,
        ISBROWSABLE,
        ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED
    )
    values 
    (
        @ID
        @QUERYVIEWCATALOGID
        @NAME
        @DESCRIPTION
        @QUERYDEFINITIONXML
        @QUERYCATEGORYCODEID
        @DATAFORMINSTANCEID
        @OTHERSCANMODIFY
        @APPUSERID
        @SITEID
        @FOLDERID
        @SECURITYLEVEL,
        @SECURITYLEVELEDIT,
        coalesce(@MOBILIZE, 0),
        coalesce(@ISBROWSABLE, 0),
        @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE
    );
end
else
begin
    update dbo.ADHOCQUERY set 
        QUERYVIEWCATALOGID = @QUERYVIEWCATALOGID
        NAME = @NAME
        DESCRIPTION = @DESCRIPTION
        QUERYDEFINITIONXML = @QUERYDEFINITIONXML
        QUERYCATEGORYCODEID = @QUERYCATEGORYCODEID
        DATAFORMINSTANCEID = @DATAFORMINSTANCEID
        OTHERSCANMODIFY = @OTHERSCANMODIFY
        SITEID = @SITEID
        FOLDERID = @FOLDERID,
        SECURITYLEVEL = @SECURITYLEVEL,
        SECURITYLEVELEDIT = @SECURITYLEVELEDIT,
        MOBILIZE = coalesce(@MOBILIZE, MOBILIZE),
        ISBROWSABLE = coalesce(@ISBROWSABLE, ISBROWSABLE),
        CHANGEDBYID = @CHANGEAGENTID, DATECHANGED = @CURRENTDATE
    where ID = @ID;

    if @SECURITYLEVEL = 0 or @SECURITYLEVELEDIT = 0
    begin
        declare @contextCache varbinary(128);
        set @contextCache = CONTEXT_INFO();
        set CONTEXT_INFO @CHANGEAGENTID;                    

        -- Clear specific roles if all roles are allowed now

        if @SECURITYLEVEL = 0
            delete from dbo.SYSTEMROLEPERM_ADHOCQUERYINSTANCE where ADHOCQUERYID = @ID

        if @SECURITYLEVELEDIT = 0
            delete from dbo.SYSTEMROLEPERM_ADHOCQUERYINSTANCEEDIT where ADHOCQUERYID = @ID

        if not @contextCache is null
            set CONTEXT_INFO @contextCache;
    end
end

-- Update the role permissions for this query

if @SECURITYLEVEL = 1
begin
    exec dbo.USP_ADHOCQUERYINSTANCE_GETSYSTEMROLEPERMISSIONSLIST_UPDATEFROMXML @ID, @PERMISSIONEDROLES, @CHANGEAGENTID, @CURRENTDATE
end


if @SECURITYLEVELEDIT = 1
begin
    exec dbo.USP_ADHOCQUERYINSTANCE_GETSYSTEMROLEEDITPERMISSIONSLIST_UPDATEFROMXML @ID, @PERMISSIONEDROLESEDIT, @CHANGEAGENTID, @CURRENTDATE
end

if @ISFAVORITE = 1
begin
    exec dbo.USP_APPUSERADHOCQUERYFAVORITE_ADD @ID, @APPUSERID, @CHANGEAGENTID
end
else
begin
    exec dbo.USP_APPUSERADHOCQUERYFAVORITE_DELETE @ID, @APPUSERID, @CHANGEAGENTID
end