Compare commits
3 Commits
master
...
C2024-004_
Author | SHA1 | Date | |
---|---|---|---|
09d0f73396 | |||
96e85e8c5c | |||
f6f7d6a8c7 |
@ -22226,6 +22226,419 @@ Go
|
||||
IF (@@Error = 0) PRINT 'Procedure Creation: [vesp_ListUnlinkedItems] Succeeded'
|
||||
ELSE PRINT 'Procedure Creation: [vesp_ListUnlinkedItems] Error on Creation'
|
||||
GO
|
||||
|
||||
|
||||
|
||||
/*
|
||||
==========================================================================================================
|
||||
Begin: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'')
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[CopyItemAndChildren]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1)
|
||||
DROP PROCEDURE [CopyItemAndChildren];
|
||||
GO
|
||||
|
||||
/*****************************************************************************
|
||||
Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE
|
||||
Copyright 2024 - Volian Enterprises, Inc. All rights reserved.
|
||||
*****************************************************************************/
|
||||
/*
|
||||
==========================================================================================================
|
||||
Author: Kevin Laskey
|
||||
Modified Date: 07/09/2024
|
||||
Description: Copy Item and its Children
|
||||
==========================================================================================================
|
||||
*/
|
||||
CREATE PROCEDURE [dbo].[CopyItemAndChildren]
|
||||
(
|
||||
@StartItemID INT,
|
||||
@DestFormatID INT,
|
||||
@UserID NVARCHAR(100),
|
||||
@NewStartItemID int output
|
||||
)
|
||||
WITH EXECUTE AS OWNER
|
||||
AS
|
||||
BEGIN TRY -- Try Block
|
||||
|
||||
--+-----------------------------------------------------------------+
|
||||
--& BEGIN TRANSACTION to make these changes temporary &
|
||||
--+-----------------------------------------------------------------+
|
||||
BEGIN TRANSACTION
|
||||
if exists (select * from tblitems where itemid = @StartItemID and DeleteStatus !=0)
|
||||
BEGIN
|
||||
RAISERROR ('###Cannot Paste Step###This step has been deleted',16,1)
|
||||
RETURN
|
||||
END
|
||||
DECLARE @Children AS TABLE
|
||||
(
|
||||
ItemID INT PRIMARY KEY,
|
||||
NewItemID INT,
|
||||
ContentID INT,
|
||||
NewContentID INT,
|
||||
FormatID INT,
|
||||
NewFormatID INT
|
||||
)
|
||||
DECLARE @NewDocuments AS TABLE
|
||||
(
|
||||
DocID INT PRIMARY KEY,
|
||||
NewDocID INT
|
||||
)
|
||||
-- Locals
|
||||
DECLARE @DTS DATETIME -- DTS of all New Items
|
||||
DECLARE @StartContentID INT
|
||||
Select @StartContentID = ContentID from Items where ItemID = @StartItemID
|
||||
SET @DTS = GETDATE() -- Get the current Date and Time
|
||||
-- Get a list of all of the Items to be copied based upon StartItemID and EndItemID
|
||||
-- If the StartItemID = EndItemID then it is a single item and it's children
|
||||
INSERT INTO @Children SELECT ItemID,ItemID,ContentID,ContentID,FormatID,FormatID FROM vefn_ChildItemsRange(@StartItemID,@StartItemID,null)
|
||||
-- <<< Copy Contents >>>
|
||||
-- Create new content rows to match the existing rows. Set the type to the Current ContentID temporarily
|
||||
-- so that the new content rows can be associated with the existing content rows.
|
||||
-- Rem 'Copy Of ' + before first [Number] for C2024-004 (KL)
|
||||
INSERT INTO Contents
|
||||
([Number],[Text],[Type],[FormatID],[Config],[DTS],[UserID])
|
||||
select CASE when [ContentID] = @StartContentID and [Type]<20000 then [Number] else [Number] end,
|
||||
[Text],[ContentID],[FormatID],[Config],@DTS,@UserID
|
||||
from Contents where ContentID in(Select ContentID from @Children)
|
||||
-- Update the @Children with the NewConentIDs
|
||||
--print 'A ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
UPDATE NN set NN.NewContentID = CC.ContentID
|
||||
From Contents CC
|
||||
Join @Children NN on NN.ContentID = CC.Type AND CC.DTS = @DTS and CC.UserID = @UserID
|
||||
-- Reset the Type column in the Contents table with the Type column from the original Records.
|
||||
--print 'B ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
DECLARE @SourceType INT
|
||||
Select @SourceType = Type from Contents where ContentID = @StartContentID
|
||||
if @SourceType = 0
|
||||
BEGIN
|
||||
UPDATE CC set CC.Type = CC2.Type, CC.DTS = CC2.DTS, CC.UserID = CC2.UserID
|
||||
From Contents CC
|
||||
Join @Children NN on NN.NewContentID = CC.ContentID
|
||||
Join Contents CC2 on NN.ContentID = CC2.ContentID
|
||||
END
|
||||
else
|
||||
BEGIN
|
||||
UPDATE CC set CC.Type = CC2.Type
|
||||
From Contents CC
|
||||
Join @Children NN on NN.NewContentID = CC.ContentID
|
||||
Join Contents CC2 on NN.ContentID = CC2.ContentID
|
||||
END
|
||||
--print 'B1 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- Contents are done
|
||||
-- SELECT * From Contents where DTS = @DTS and UserID = @UserID
|
||||
-- <<< Copy Grids >>>
|
||||
INSERT INTO [Grids]([ContentID],[Data],[Config],[DTS],[UserID])
|
||||
SELECT NN.[NewContentID],[Data],[Config],@DTS,@UserID
|
||||
FROM [Grids] GG Join @Children NN on GG.ContentID = NN.ContentID
|
||||
-- <<< Copy Images >>>
|
||||
--print 'B2 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
INSERT INTO [Images]([ContentID],[ImageType],[FileName],[Data],[Config],[DTS],[UserID])
|
||||
SELECT NN.[NewContentID],[ImageType],[FileName],[Data],[Config],@DTS,@UserID
|
||||
FROM [Images] II Join @Children NN on II.ContentID = NN.ContentID
|
||||
-- Create new item rows based upon the current item rows and the @Children table, with the NewContentIDs
|
||||
--print 'B3 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
INSERT INTO [Items] ([PreviousID],[ContentID],[DTS],[UserID])
|
||||
SELECT II.[PreviousID], -- Leave the PreviousID as is for now
|
||||
NN.NewContentID, @DTS, @UserID
|
||||
from @Children NN
|
||||
join Items II on II.ContentID = NN.ContentID
|
||||
-- Update the @Children with the NewItemIDs
|
||||
--print 'B4 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
UPDATE NN set NN.NewItemID = II.ItemID
|
||||
From Items II
|
||||
Join @Children NN on NN.NewContentID = II.ContentID AND II.DTS = @DTS and II.UserID = @UserID
|
||||
DECLARE @NewItemID int
|
||||
SELECT @NewItemID = NewItemID
|
||||
FROM @Children
|
||||
WHERE ItemID = @StartItemID
|
||||
--print 'B5 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
UPDATE NN SET NN.[NewFormatID] = CC.[FormatID]
|
||||
FROM @Children NN
|
||||
Join vefn_ChildItemsRange(@NewItemID,@NewItemID,@DestFormatID) CC
|
||||
ON NN.NewItemID = CC.ItemID
|
||||
-- The @Children table is now complete
|
||||
--SELECT * From @Children
|
||||
-- Update the PreviousID in the new Item rows, to the new ItemIDs based upon the old ItemIDs
|
||||
--print 'B6 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
Update II Set II.[PreviousID] = NN.NewItemID
|
||||
from Items II
|
||||
Join @Children NN on NN.ItemID = II.PreviousID AND II.DTS = @DTS and II.UserID = @UserID
|
||||
-- Get the new ItemIDs based upon the old ItemIDs
|
||||
SELECT @NewStartItemID = NewItemID from @Children where ItemID = @StartItemID
|
||||
--SELECT @NewEndItemID = NewItemID from @Children where ItemID = @EndItemID
|
||||
-- Set the PreviousID for the starting Item to null temporarily.
|
||||
-- This will be adjusted based upon where the step is inserted.
|
||||
--print 'B7 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
Update Items Set PreviousID = null where ItemID = @NewStartItemID
|
||||
if @SourceType = 0
|
||||
BEGIN
|
||||
UPDATE II SET II.DTS = II2.DTS, II.UserID = II2.UserID
|
||||
From Items II
|
||||
Join @Children NN on NN.NewItemID = II.ItemID
|
||||
Join Items II2 on NN.ItemID = II2.ItemID
|
||||
WHERE NN.ItemID = @StartItemID
|
||||
END
|
||||
--print 'C ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- Items are done
|
||||
--SELECT * From Items where DTS = @DTS and UserID = @UserID
|
||||
-- <<< Copy Parts >>>
|
||||
INSERT INTO [Parts] ([ContentID],[FromType],[ItemID],[DTS],[UserID])
|
||||
Select NNF.NewContentID,[FromType],NNT.NewItemID, @DTS, @UserID from Parts PP
|
||||
JOIN @Children NNF on PP.ContentID = NNF.ContentID
|
||||
JOIN @Children NNT on PP.ItemID = NNT.ItemID
|
||||
--print 'D ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- Parts are done
|
||||
-- SELECT * From Parts where DTS = @DTS and UserID = @UserID
|
||||
-- <<< Copy Annotations >>>
|
||||
INSERT INTO [Annotations] ([ItemID],[TypeID],[RtfText],[SearchText],[Config],[DTS],[UserID])
|
||||
Select NewItemID, TypeID, RtfText, SearchText, Config, @DTS, @UserID
|
||||
from Annotations AA Join @Children NN on AA.ItemID = NN.ItemID
|
||||
--print 'E ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- Annotations are done
|
||||
-- SELECT * From Annotations where DTS = @DTS and UserID = @UserID
|
||||
-- <<< Copy Documents and Entries>>>
|
||||
-- logic to create Entries for Library Documents
|
||||
INSERT INTO [Entries] ([ContentID],[DocID],[DTS],[UserID])
|
||||
SELECT NN.[NewContentID],EE.[DocID],@DTS,@UserID
|
||||
FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID
|
||||
JOIN [Documents] DD on EE.[DocID] = DD.[DocID] and Isnull(LibTitle,'') <> ''
|
||||
-- Logic to create new documents for any documents used that do not have libtitles
|
||||
INSERT INTO [Documents] ([LibTitle],[DocContent],[DocAscii],[Config],[DTS],[UserID],[FileExtension])
|
||||
OUTPUT CAST(INSERTED.[LibTitle] as INT),INSERTED.[DocID] INTO @NewDocuments
|
||||
SELECT str(DD.[DocID]),[DocContent],[DocAscii],[Config],@DTS,@UserID,[FileExtension]
|
||||
FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID
|
||||
JOIN [Documents] DD on EE.[DocID] = DD.[DocID] and Isnull(LibTitle,'') = ''
|
||||
UPDATE DD SET LibTitle = ''
|
||||
FROM Documents DD JOIN @NewDocuments ND on DD.[DocID] = ND.[NewDocID]
|
||||
where DTS = @DTS and UserID = @UserID
|
||||
--print 'F ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- Documents are Done
|
||||
-- SELECT * From Documents where DTS = @DTS and UserID = @UserID
|
||||
-- Logic to create entries for these newly created documents
|
||||
INSERT INTO [Entries] ([ContentID],[DocID],[DTS],[UserID])
|
||||
SELECT NN.[NewContentID],ND.[NewDocID],@DTS,@UserID
|
||||
FROM [Entries] EE JOIN @Children NN on NN.ContentID = EE.ContentID
|
||||
JOIN @NewDocuments ND on EE.[DocID] = ND.[DocID]
|
||||
-- Logic to Create DROUsages for these newly created documents
|
||||
INSERT INTO [DROUsages] ([DocID],[ROID],[Config],[DTS],[UserID],[RODbID])
|
||||
SELECT ND.[NewDocID],[ROID],[Config],@DTS,@UserID,[RODbID]
|
||||
FROM [DROUsages] RR
|
||||
JOIN @NewDocuments ND on RR.[DocID] = ND.[DocID]
|
||||
|
||||
--print 'G ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- Entries are done
|
||||
-- SELECT * From Entries EE JOIN Documents DD on ee.DocID = DD.DocID where EE.DTS = @DTS and EE.UserID = @UserID
|
||||
-- <<< Copy RoUsages >>>
|
||||
INSERT INTO [RoUsages] ([ContentID],[ROID],[Config],[DTS],[UserID],[RODbID])
|
||||
SELECT NN.[NewContentID],CAST([ROUsageID] as nvarchar(16)),[Config],@DTS,@UserID,[RODbID]
|
||||
FROM [RoUsages] RR Join @Children NN on RR.ContentID = NN.ContentID
|
||||
-- Update content records for newly copied records to use correct RO usage ids in the RO tags
|
||||
DECLARE @RowsAffected int
|
||||
SET @RowsAffected=1
|
||||
WHILE @RowsAffected > 0
|
||||
BEGIN
|
||||
UPDATE CC SET [TEXT] = C2.NewText
|
||||
FROM CONTENTS CC
|
||||
JOIN (SELECT C1.ContentID, .dbo.vefn_FixROText(C1.Text, CAST([ROID] as int), [ROUsageID]) NewText
|
||||
FROM CONTENTS C1
|
||||
JOIN @Children NN on C1.ContentID = NN.NewContentID
|
||||
JOIN RoUsages RO on NN.NewContentID = RO.ContentID where Len([ROID]) < 12) C2 ON CC.ContentID = C2.ContentID
|
||||
WHERE [TEXT] <> C2.NewText
|
||||
SET @RowsAffected = @@RowCount
|
||||
END
|
||||
-- Update grid records for newly copied records to use correct RO usage ids in the RO tags
|
||||
SET @RowsAffected=1
|
||||
WHILE @RowsAffected > 0
|
||||
BEGIN
|
||||
UPDATE GG SET [Data] = G2.NewData
|
||||
FROM GRIDS GG
|
||||
JOIN (SELECT G1.ContentID, .dbo.vefn_FixROData(G1.Data, CAST([ROID] as int), [ROUsageID]) NewData
|
||||
FROM GRIDS G1
|
||||
JOIN @Children NN on G1.ContentID = NN.NewContentID
|
||||
JOIN RoUsages RO on NN.NewContentID = RO.ContentID where Len([ROID]) < 12) G2 ON GG.ContentID = G2.ContentID
|
||||
WHERE Cast([Data] as nvarchar(max)) <> cast(G2.NewData as nvarchar(max))
|
||||
SET @RowsAffected = @@RowCount
|
||||
END
|
||||
UPDATE RON SET [ROID] = ROO.[ROID]
|
||||
FROM RoUsages RON
|
||||
JOIN @Children NN on RON.ContentID = NN.NewContentID
|
||||
JOIN RoUsages ROO on CAST(RON.ROID as int) = ROO.RoUsageID
|
||||
where Len(RON.[ROID]) < 12
|
||||
--print 'H ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- RoUsages are done
|
||||
-- SELECT * From RoUsages where DTS = @DTS and UserID = @UserID
|
||||
|
||||
-- <<< Copy Transtions >>>
|
||||
-- Note that the inserted record has the 'TranType' field set to old transitionid. This is done
|
||||
-- so that the next step can replace the old transitionid with the new transitionid in the
|
||||
-- content record's transition tokens. The TranType gets reset after the content records are
|
||||
-- updated.
|
||||
-- Also note that the 'toid/rangeid' may need converted to newly copied ids or may not. If it's
|
||||
-- not a range, then it always is converted to new, if there is a new. If it's a range, both
|
||||
-- the toid & the rangeid must be new in order for the conversion to be correct. You cannot
|
||||
-- have part of the range pointing to the new and part of the range pointing to the original
|
||||
-- locations.
|
||||
|
||||
INSERT INTO .[dbo].[Transitions] ([FromID],[ToID],[RangeID],[IsRange],[TranType],[Config],[DTS],[UserID])
|
||||
SELECT NNF.[NewContentID],
|
||||
-- if both toid & range are null, use the original toid & rangeid
|
||||
CASE WHEN NNT.[NewItemID] is null or NNR.[NewItemID] is null THEN [ToID] ELSE NNT.[NewItemID] END,
|
||||
CASE WHEN NNT.[NewItemID] is null or NNR.[NewItemID] is null THEN [RangeID] ELSE NNR.[NewItemID] END,
|
||||
[IsRange],[TransitionID],[Config],@DTS,@UserID
|
||||
FROM .[dbo].[Transitions] TT
|
||||
JOIN @Children NNF on TT.[FromID] = NNF.[ContentID]
|
||||
LEFT JOIN @Children NNT on TT.[ToID] = NNT.[ItemID]
|
||||
LEFT JOIN @Children NNR on TT.[RangeID] = NNR.[ItemID]
|
||||
--print 'H1 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- -- Update content records for newly copied records to use correct TransitionIDs in the Transition tags
|
||||
SET @RowsAffected=1
|
||||
WHILE @RowsAffected > 0
|
||||
BEGIN
|
||||
UPDATE CC SET [TEXT] = C2.NewText
|
||||
FROM CONTENTS CC
|
||||
JOIN (SELECT C1.ContentID, .dbo.vefn_FixTransitionTextForCopy(C1.Text, TRO.TransitionID, TRO.TranType, TRO.[ToID], TRO.[RangeID],TR.[TransitionID], TR.[ToID], TR.[RangeID], .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)) NewText
|
||||
FROM CONTENTS C1
|
||||
JOIN @Children NN on C1.ContentID = NN.NewContentID
|
||||
JOIN Transitions TR on NN.NewContentID = TR.FromID
|
||||
JOIN Transitions TRO on TR.TranType = TRO.TransitionID) C2 ON CC.ContentID = C2.ContentID
|
||||
WHERE [TEXT] <> C2.NewText
|
||||
SET @RowsAffected = @@RowCount
|
||||
END
|
||||
--print 'H2 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
--set nocount off
|
||||
-- -- Update grid records for newly copied records to use correct TransitionIDs in the Transition tags
|
||||
declare @grids table
|
||||
(
|
||||
contentid int primary key,
|
||||
data xml
|
||||
)
|
||||
insert into @grids select gg.contentid,gg.data from GRIDS GG
|
||||
where gg.contentid in (select nn.newcontentid from
|
||||
@Children NN
|
||||
JOIN Transitions TR on NN.NewContentID = TR.FromID
|
||||
JOIN Transitions TRO on TR.TranType = TRO.TransitionID)
|
||||
--print 'H2.1 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
--select * from @grids
|
||||
SET @RowsAffected=1
|
||||
WHILE @RowsAffected > 0
|
||||
BEGIN
|
||||
UPDATE GG SET [DATA] = G2.NewData
|
||||
FROM @GRIDS GG
|
||||
JOIN (SELECT G1.ContentID, .dbo.vefn_FixTransitionDataForCopy(G1.Data, TRO.TransitionID, TRO.TranType, TRO.[ToID], TRO.[RangeID],TR.[TransitionID], TR.[ToID], TR.[RangeID], .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)) NewData
|
||||
FROM @GRIDS G1
|
||||
JOIN @Children NN on G1.ContentID = NN.NewContentID
|
||||
JOIN Transitions TR on NN.NewContentID = TR.FromID
|
||||
JOIN Transitions TRO on TR.TranType = TRO.TransitionID) G2 ON GG.ContentID = G2.ContentID
|
||||
WHERE Cast([DATA] as nvarchar(max)) <> CAST(G2.NewData as nvarchar(max))
|
||||
SET @RowsAffected = @@RowCount
|
||||
END
|
||||
--print 'H2.2 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
update GG set data = g1.data from Grids gg join @grids g1 on gg.contentid = g1.contentid
|
||||
--print 'H3 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
--set nocount on
|
||||
-- Add 'Verification Required' AnnotationType
|
||||
DECLARE @typeID int
|
||||
SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required'
|
||||
IF(@typeID IS NULL)
|
||||
BEGIN
|
||||
INSERT INTO [AnnotationTypes] ([Name],[UserID]) VALUES ('Verification Required','Volian')
|
||||
SELECT @typeID = SCOPE_IDENTITY()
|
||||
END
|
||||
-- Add "Verification Required" Annotation for each Transition whose transition format changes
|
||||
INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID])
|
||||
SELECT NN.NewItemID, @typeID,'Verify Transition Format',@UserID
|
||||
FROM Transitions TR
|
||||
JOIN @Children NN on TR.FromID = NN.NewContentID
|
||||
JOIN Transitions TRO on TR.TranType = TRO.TransitionID
|
||||
WHERE .dbo.vefn_CompareTranFormat(NN.FormatID, NN.NewFormatID, TRO.TranType) <> 0
|
||||
--print 'H4 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
UPDATE TR SET TR.[TranType] = .dbo.vefn_GetNewTranType(NN.FormatID, NN.NewFormatID, TRO.TranType)
|
||||
FROM Transitions TR
|
||||
JOIN @Children NN on TR.FromID = NN.NewContentID
|
||||
JOIN Transitions TRO on TR.TranType = TRO.TransitionID
|
||||
--print 'H5 ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
-- Transitions are done
|
||||
-- SELECT * From Transitions where DTS = @DTS and UserID = @UserID
|
||||
--print 'Z ' + cast(datediff(s,@dts,getdate()) as varchar(100))
|
||||
--foldouts fixing code
|
||||
if exists (select * from contents where contentid in (select newcontentid from @children) and config like '%FloatingFoldout%')
|
||||
begin
|
||||
--insert into #mytemp
|
||||
select cc.contentid,xsteps.value('@FloatingFoldout','int') oldfoldoutid,(select newitemid
|
||||
from @children
|
||||
where itemid = xsteps.value('@FloatingFoldout','int')) newfoldoutid,xconfig
|
||||
into #mytemp
|
||||
from (select *,cast(config as xml) xconfig from contents where contentid in (select newcontentid from @children)) cc
|
||||
cross apply xconfig.nodes('Config/Step') tsteps(xsteps)
|
||||
--build @cmd string
|
||||
declare @cmd nvarchar(max)
|
||||
declare cmds cursor for
|
||||
select distinct 'update #mytemp set xconfig.modify(''replace value of (Config/Step/@FloatingFoldout)[1] with "'
|
||||
+ cast(newfoldoutid as varchar(10))
|
||||
+ '"'') where xconfig.value(''(Config/Step/@FloatingFoldout)[1]'',''int'') = '
|
||||
+ cast(oldfoldoutid as varchar(10))
|
||||
from #mytemp
|
||||
--execute cursor over rows
|
||||
open cmds
|
||||
fetch next from cmds into @cmd
|
||||
while @@fetch_status = 0
|
||||
begin
|
||||
exec sp_executesql @cmd
|
||||
fetch next from cmds into @cmd
|
||||
end
|
||||
close cmds
|
||||
deallocate cmds
|
||||
--actually update contents
|
||||
update cc set config = cast(xconfig as varchar(max)) from contents cc join #mytemp mt on cc.contentid = mt.contentid
|
||||
--get rid of #mytemp
|
||||
drop table #mytemp
|
||||
end
|
||||
--end foldouts fixing code
|
||||
--section start
|
||||
DECLARE @NewContentID int
|
||||
Select @NewContentID = NewContentID from @Children where ItemID = @StartItemID
|
||||
DECLARE @Config varchar(max)
|
||||
DECLARE @XConfig xml
|
||||
select @Config = config from contents where contentid = @NewContentID
|
||||
select @XConfig = cast(@Config as xml)
|
||||
if @Config like '%SectionStart%' begin
|
||||
DECLARE @SectionStart int
|
||||
select @SectionStart = xproc.value('@SectionStart','int') from @xconfig.nodes('Config/Procedure') tproc(xproc)
|
||||
DECLARE @NewSectionStart int
|
||||
select @NewSectionStart = newitemid from @children where itemid = @SectionStart
|
||||
DECLARE @cmd2 nvarchar(max)
|
||||
set @cmd2 = '
|
||||
declare @XConfig xml;
|
||||
set @XConfig = cast(''' + @Config + ''' as xml);
|
||||
set @XConfig.modify(''replace value of (Config/Procedure/@SectionStart)[1] with "' + cast(@NewSectionStart as nvarchar(10)) + '"'');
|
||||
update contents set config = cast(@XConfig as varchar(max)) where contentid = ' + cast(@NewContentID as nvarchar(10)) + ';'
|
||||
exec sp_executesql @cmd2
|
||||
end
|
||||
--end section start
|
||||
IF( @@TRANCOUNT > 0 ) COMMIT
|
||||
END TRY
|
||||
BEGIN CATCH -- Catch Block
|
||||
IF( @@TRANCOUNT = 1 ) ROLLBACK -- Only rollback if top level
|
||||
ELSE IF( @@TRANCOUNT > 1 ) COMMIT -- Otherwise commit. Top level will rollback
|
||||
EXEC vlnErrorHandler
|
||||
END CATCH
|
||||
|
||||
Go
|
||||
|
||||
IF (@@Error = 0) PRINT 'Procedure Creation: [CopyItemAndChildren] Succeeded'
|
||||
ELSE PRINT 'Procedure Creation: [CopyItemAndChildren] Error on Creation'
|
||||
GO
|
||||
|
||||
/*
|
||||
==========================================================================================================
|
||||
End: C2024-004: KL - Update Copy Replace functionality, (remove ''copy of'')
|
||||
==========================================================================================================
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
-----------------------------------------------------------------------------
|
||||
/*
|
||||
---------------------------------------------------------------------------
|
||||
@ -22260,8 +22673,8 @@ BEGIN TRY -- Try Block
|
||||
DECLARE @RevDate varchar(255)
|
||||
DECLARE @RevDescription varchar(255)
|
||||
|
||||
set @RevDate = '03/27/2024 11:00 AM'
|
||||
set @RevDescription = 'B2024-018: Enhanced link issue with sub-sections in source but not in enhanced'
|
||||
set @RevDate = '07/09/2024 9:00 AM'
|
||||
set @RevDescription = 'C2024-004: Update Copy Replace functionality'
|
||||
|
||||
Select cast(@RevDate as datetime) RevDate, @RevDescription RevDescription
|
||||
PRINT 'SQL Code Revision ' + @RevDate + ' - ' + @RevDescription
|
||||
|
@ -1944,6 +1944,54 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
#endregion
|
||||
#region DataPortal
|
||||
private void DataPortal_Fetch(PastingPartEnhancedCriteria criteria)
|
||||
{
|
||||
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ItemInfo.DataPortal_Fetch", GetHashCode());
|
||||
try
|
||||
{
|
||||
using (SqlConnection cn = Database.VEPROMS_SqlConnection)
|
||||
{
|
||||
Csla.ApplicationContext.LocalContext["cn"] = cn;
|
||||
using (SqlCommand cm = cn.CreateCommand())
|
||||
{
|
||||
cm.CommandType = CommandType.StoredProcedure;
|
||||
cm.Parameters.AddWithValue("@StartItemID", criteria.StartItemID); // copy children
|
||||
cm.Parameters.AddWithValue("@ItemID", criteria.ItemID); //copy to
|
||||
cm.Parameters.AddWithValue("@Type", criteria.Type);
|
||||
cm.Parameters.AddWithValue("@DTS", criteria.DTS);
|
||||
cm.Parameters.AddWithValue("@UserID", criteria.UserID);
|
||||
SqlParameter param_ItemID = new SqlParameter("@NewItemID", SqlDbType.Int);
|
||||
param_ItemID.Direction = ParameterDirection.Output;
|
||||
cm.Parameters.Add(param_ItemID);
|
||||
cm.CommandText = "PasteItemEnhancedReplace";
|
||||
//cm.CommandText = "PasteItemReplace";
|
||||
cm.CommandTimeout = Database.DefaultTimeout;
|
||||
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
||||
{
|
||||
//int newItemID = (int)cm.Parameters["@NewItemID"].Value;
|
||||
if (!dr.Read())
|
||||
{
|
||||
_ErrorMessage = "No Record Found";
|
||||
return;
|
||||
}
|
||||
ReadData(dr);
|
||||
}
|
||||
}
|
||||
// removing of item only needed for local data portal
|
||||
if (Csla.ApplicationContext.ExecutionLocation == Csla.ApplicationContext.ExecutionLocations.Client)
|
||||
Csla.ApplicationContext.LocalContext.Remove("cn");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
if (!ex.Message.Contains("This step has been deleted") && !ex.Message.Contains("This current step has been deleted in another session"))
|
||||
{
|
||||
if (_MyLog.IsErrorEnabled) _MyLog.Error("ItemInfo.DataPortal_Fetch", ex);
|
||||
}
|
||||
_ErrorMessage = ex.Message;
|
||||
throw new DbCslaException("ItemInfo.DataPortal_Fetch", ex);
|
||||
}
|
||||
}
|
||||
private void DataPortal_Fetch(PastingPartCriteria criteria)
|
||||
{
|
||||
if (_MyLog.IsDebugEnabled) _MyLog.DebugFormat("[{0}] ItemInfo.DataPortal_Fetch", GetHashCode());
|
||||
@ -2066,6 +2114,68 @@ namespace VEPROMS.CSLA.Library
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
#region PastingPartEnhancedCriteria
|
||||
[Serializable()]
|
||||
public class PastingPartEnhancedCriteria
|
||||
{
|
||||
#region Properties
|
||||
private int _StartItemID;
|
||||
public int StartItemID
|
||||
{
|
||||
get { return _StartItemID; }
|
||||
set { _StartItemID = value; }
|
||||
}
|
||||
private int _ItemID; // paste relative to this itemid
|
||||
public int ItemID
|
||||
{
|
||||
get { return _ItemID; }
|
||||
set { _ItemID = value; }
|
||||
}
|
||||
private EAddpingPart _AddType;
|
||||
public EAddpingPart AddType
|
||||
{
|
||||
get { return _AddType; }
|
||||
set { _AddType = value; }
|
||||
}
|
||||
private int? _FromType = null;
|
||||
public int? FromType
|
||||
{
|
||||
get { return _FromType; }
|
||||
set { _FromType = value; }
|
||||
}
|
||||
private int? _Type = null;
|
||||
public int? Type
|
||||
{
|
||||
get { return _Type; }
|
||||
set { _Type = value; }
|
||||
}
|
||||
private DateTime _DTS;
|
||||
public DateTime DTS
|
||||
{
|
||||
get { return _DTS; }
|
||||
set { _DTS = value; }
|
||||
}
|
||||
private string _UserID;
|
||||
public string UserID
|
||||
{
|
||||
get { return _UserID; }
|
||||
set { _UserID = value; }
|
||||
}
|
||||
#endregion
|
||||
#region Constructor
|
||||
public PastingPartEnhancedCriteria(int startItemid, int itemID, EAddpingPart addType, int? type, int? fromType, DateTime dts, string userID)
|
||||
{
|
||||
_StartItemID = startItemid;
|
||||
_ItemID = itemID;
|
||||
_AddType = addType;
|
||||
_Type = type;
|
||||
_FromType = fromType;
|
||||
_DTS = dts;
|
||||
_UserID = userID;
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
#endregion
|
||||
#region PastingPartCriteria
|
||||
[Serializable()]
|
||||
public class PastingPartCriteria
|
||||
@ -2356,6 +2466,17 @@ namespace VEPROMS.CSLA.Library
|
||||
_MyPrevious = null; // Reset list so that the next line gets a new list
|
||||
if (MyPrevious != null) MyPrevious.RefreshNextItems(); // Update List for new value
|
||||
}
|
||||
internal static ItemInfo CopyPasteReplaceEnhancedItemInfoFetch(int copyStartID, ItemInfo itemInfo) // int itemID, int? type, int? fromType)
|
||||
{
|
||||
ItemInfo tmp = null;
|
||||
tmp = DataPortal.Fetch<StepInfo>(new ItemInfo.PastingPartEnhancedCriteria(copyStartID, itemInfo.ItemID, ItemInfo.EAddpingPart.Replace, itemInfo.MyContent.Type, itemInfo.MyContent.Type, DateTime.Now, Volian.Base.Library.VlnSettings.UserID));
|
||||
if (tmp == null)
|
||||
{
|
||||
tmp = ItemInfo.Get(copyStartID);
|
||||
}
|
||||
AddToCache(tmp);
|
||||
return tmp;
|
||||
}
|
||||
internal static ItemInfo CopyPasteReplaceItemInfoFetch(int copyStartID, ItemInfo itemInfo) // int itemID, int? type, int? fromType)
|
||||
{
|
||||
ItemInfo tmp = null;
|
||||
@ -2503,10 +2624,18 @@ namespace VEPROMS.CSLA.Library
|
||||
|
||||
public static ItemInfo PasteReplace(ItemInfo itemInfo, int copyStartID, string chgid, TreeNode treeNodeReplace)
|
||||
{
|
||||
if (itemInfo.IsEnhancedStep)
|
||||
{
|
||||
// don't replace the step, just remove current children & add new children:
|
||||
if (!CanDeleteObject())
|
||||
throw new System.Security.SecurityException("User not authorized to remove a Item");
|
||||
|
||||
}
|
||||
bool tmp = false;
|
||||
return PasteReplace(itemInfo, copyStartID, chgid, treeNodeReplace, ref tmp);
|
||||
}
|
||||
// B2017-179 return a bool (firstTrans) if we could not replace the step but the user wants to position to the first transition that needs resolved
|
||||
// B2017-179 return a bool (firstTrans) if we could not replace the step but the user wants to position to the first transition that needs resolved
|
||||
public static ItemInfo PasteReplace(ItemInfo itemInfo, int copyStartID, string chgid, TreeNode treeNodeReplace, ref bool firstTrans)
|
||||
{
|
||||
firstTrans = false;
|
||||
@ -2518,8 +2647,17 @@ namespace VEPROMS.CSLA.Library
|
||||
ItemInfo newItemInfo = null;
|
||||
try
|
||||
{
|
||||
newItemInfo = ItemInfo.CopyPasteReplaceItemInfoFetch(copyStartID, itemInfo); //itemInfo.ItemID, itemInfo.MyContent.Type, itemInfo.MyContent.Type);
|
||||
if (newItemInfo == null) return null;
|
||||
// if this item is an enhanced item, do a pastereplace specific to it:
|
||||
if (itemInfo.IsEnhancedStep)
|
||||
{
|
||||
newItemInfo = ItemInfo.CopyPasteReplaceEnhancedItemInfoFetch(copyStartID, itemInfo);
|
||||
if (newItemInfo == null) return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
newItemInfo = ItemInfo.CopyPasteReplaceItemInfoFetch(copyStartID, itemInfo); //itemInfo.ItemID, itemInfo.MyContent.Type, itemInfo.MyContent.Type);
|
||||
if (newItemInfo == null) return null;
|
||||
}
|
||||
}
|
||||
catch (Exception ex1)
|
||||
{
|
||||
@ -2567,7 +2705,7 @@ namespace VEPROMS.CSLA.Library
|
||||
//Create tree node for copied procedure when no other procedures exist in the folder
|
||||
VETreeNode vtn = treeNodeReplace as VETreeNode;
|
||||
DocVersionInfo dvi = vtn.VEObject as DocVersionInfo;
|
||||
|
||||
|
||||
ItemInfo newProc = dvi.PasteChild(copyStartID);
|
||||
VETreeNode tn1 = new VETreeNode(newProc);
|
||||
treeNodeReplace.Nodes.Add(tn1); // add tree node to end of list.
|
||||
@ -2584,23 +2722,23 @@ namespace VEPROMS.CSLA.Library
|
||||
firstTrans = true; // B2017-179 set the firstTrans to true and return the itminfo of the first transition location that needs resolved
|
||||
return iii;
|
||||
}
|
||||
if (!HandleSqlExceptionOnCopy(ex))
|
||||
{
|
||||
if (ex.Message.Contains("has External Transitions and has no next step")
|
||||
|| ex.Message.Contains("has External Transitions to Procedure")
|
||||
|| ex.Message.Contains("has External Transitions to it's children")
|
||||
|| ex.Message.Contains("This step has been deleted")
|
||||
)
|
||||
throw ex;
|
||||
if (!HandleSqlExceptionOnCopy(ex))
|
||||
{
|
||||
if (ex.Message.Contains("has External Transitions and has no next step")
|
||||
|| ex.Message.Contains("has External Transitions to Procedure")
|
||||
|| ex.Message.Contains("has External Transitions to it's children")
|
||||
|| ex.Message.Contains("This step has been deleted")
|
||||
)
|
||||
throw ex;
|
||||
FlexibleMessageBox.Show("Details were written to the Error Log.", "Paste Replace Failed", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
|
||||
return itemInfo;
|
||||
}
|
||||
else
|
||||
return itemInfo;
|
||||
return itemInfo;
|
||||
}
|
||||
else
|
||||
return itemInfo;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
private static bool HandleSqlExceptionOnCopy(Exception ex)
|
||||
private static bool HandleSqlExceptionOnCopy(Exception ex)
|
||||
{
|
||||
if (ex.Message.Contains("This step has been deleted"))
|
||||
{
|
||||
|
@ -669,7 +669,7 @@ namespace Volian.Controls.Library
|
||||
ItemInfo proc = myItemInfo.MyProcedure; // Find procedure Item
|
||||
string key = "Item - " + proc.ItemID.ToString();
|
||||
|
||||
if (_MyDisplayTabItems.ContainsKey(key)) // If procedure page open use it
|
||||
if (_MyDisplayTabItems.ContainsKey(key) && pasteType != ItemInfo.EAddpingPart.Replace) // If procedure page open use it unless replace
|
||||
{
|
||||
DisplayTabItem pg = _MyDisplayTabItems[key];
|
||||
if (pg.MyStepTabPanel.MyStepPanel._LookupEditItems.ContainsKey(myItemInfo.ItemID) &&
|
||||
@ -688,14 +688,14 @@ namespace Volian.Controls.Library
|
||||
edtitm.PasteSiblingAfter(copyStartID);
|
||||
break;
|
||||
case ItemInfo.EAddpingPart.Replace:
|
||||
|
||||
|
||||
EditItem ei = edtitm.PasteReplace(copyStartID);
|
||||
if (ei == null)
|
||||
{
|
||||
{
|
||||
CloseTabItem(_MyDisplayTabItems["Item - " + myItemInfo.ItemID.ToString()]); //Grab itemID and set to close open tab.
|
||||
return false; //B2017-179 PasteReplace will return null if was aborted
|
||||
}
|
||||
|
||||
|
||||
if (ei.MyItemInfo.ItemID != edtitm.MyItemInfo.ItemID)
|
||||
{
|
||||
edtitm.Dispose();
|
||||
@ -708,6 +708,12 @@ namespace Volian.Controls.Library
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else if (_MyDisplayTabItems.ContainsKey(key) && pasteType == ItemInfo.EAddpingPart.Replace)
|
||||
{
|
||||
CloseTabItem(_MyDisplayTabItems["Item - " + myItemInfo.ItemID.ToString()]); //Grab itemID and set to close open tab.
|
||||
return false; //B2017-179 PasteReplace will return null if was aborted
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -1825,8 +1825,8 @@ namespace Volian.Controls.Library
|
||||
EditItem newFocus = null;
|
||||
EditItem nextEditItem = MyNextEditItem;
|
||||
EditItem prevEditItem = MyPreviousEditItem;
|
||||
if (MyStepPanel?.SelectedEditItem?.ActiveParent == null) return null; //Was causing an error when active parent was null and the replaced proc was opened in the editor.
|
||||
EditItem parentEditItem = ActiveParent;
|
||||
//if (MyStepPanel?.SelectedEditItem?.ActiveParent == null) return null; //Was causing an error// when active parent was null and the replaced proc was opened in the editor.
|
||||
EditItem parentEditItem = MyStepPanel?.SelectedEditItem?.ActiveParent;
|
||||
|
||||
StepConfig savOrigPasteConfig = MyItemInfo.MyConfig as StepConfig;
|
||||
int TopMostYBefore = TopMostEditItem.Top;
|
||||
@ -1936,7 +1936,7 @@ namespace Volian.Controls.Library
|
||||
sia.IdentifyChildren(highlight);
|
||||
}
|
||||
}
|
||||
if (MyBeforeEditItems != null)
|
||||
if (MyBeforeEditItems != null && !MyItemInfo.IsEnhancedStep)
|
||||
{
|
||||
foreach (EditItem sib in MyBeforeEditItems)
|
||||
{
|
||||
|
@ -1749,9 +1749,9 @@ namespace Volian.Controls.Library
|
||||
EnhancedDocuments eds = MyItemInfo.GetMyEnhancedDocuments();
|
||||
// note in follow if statements, 'setting' == false when in enhanced document:
|
||||
if (setting && MyItemInfo.IsStep && (eds == null || eds.Count == 0)) // this step is in enhanced, but not linked // B2018-112 and is allowed to edit
|
||||
allowDel = true; // allow delete if not linked
|
||||
btnCpyStp.Enabled = setting;
|
||||
//B20170-158 Allow a Unlinked Step to be pasted before or after a linked step.
|
||||
allowDel = true; // allow delete if not linked
|
||||
btnCpyStp.Enabled = MyUserInfo.IsAllowedToEdit(Mydvi); // setting;
|
||||
//B20170-158 Allow a Unlinked Step to be pasted before or after a linked step.
|
||||
StepTabPanel tmp = Parent as StepTabPanel;
|
||||
//B2020-058: crash on null reference
|
||||
if (tmp != null && tmp.MyDisplayTabControl != null && tmp.MyDisplayTabControl.MyCopyStep != null)
|
||||
@ -1761,6 +1761,10 @@ namespace Volian.Controls.Library
|
||||
{
|
||||
if (MyItemInfo.IsEnhancedStep) btnPasteReplace.Enabled = btnCMPasteReplace.Enabled = false;
|
||||
}
|
||||
else if (tmp.MyDisplayTabControl.MyCopyStep.IsEnhancedStep && tmp.MyDisplayTabControl.MyCopyStep.MyDocVersion.VersionID == MyItemInfo.MyDocVersion.VersionID)
|
||||
{
|
||||
btnPasteBefore.Enabled = btnPasteAfter.Enabled = MyUserInfo.IsAllowedToEdit(Mydvi);
|
||||
}
|
||||
}
|
||||
else
|
||||
btnStepPaste.Enabled = setting;
|
||||
|
Loading…
x
Reference in New Issue
Block a user