From 55f918c150fa6268acf6e1e5ec037d37658cbea4 Mon Sep 17 00:00:00 2001 From: Rich Date: Mon, 8 Apr 2013 19:26:16 +0000 Subject: [PATCH] Added logic to only process RO value updates for the specified DocVersion. --- PROMS/DataLoader/PROMSFixes.Sql | 194 ++++++++++++++++++ .../Extension/DROUsagesExt.cs | 13 +- .../Extension/ROFSTExt.cs | 13 +- .../Extension/ROUsagesExt.cs | 14 +- 4 files changed, 222 insertions(+), 12 deletions(-) diff --git a/PROMS/DataLoader/PROMSFixes.Sql b/PROMS/DataLoader/PROMSFixes.Sql index 40eb457a..49995e1c 100644 --- a/PROMS/DataLoader/PROMSFixes.Sql +++ b/PROMS/DataLoader/PROMSFixes.Sql @@ -6549,3 +6549,197 @@ GO IF (@@Error = 0) PRINT 'Trigger alteration: tr_Documents_Delete Succeeded' ELSE PRINT 'Trigger alteration: tr_Documents_Delete Error on Alteration' GO + +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[vefn_GetVersionItems]') AND OBJECTPROPERTY(id,N'IsTableFunction') = 1) + DROP FUNCTION [vefn_GetVersionItems]; +GO +/****** Object: UserDefinedFunction [dbo].[vefn_GetVersionItems] ******/ +SET ANSI_NULLS ON +GO +SET QUOTED_IDENTIFIER ON +GO +/* +Select * from vefn_GetVersionItems('') +*/ +/***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2013 - Volian Enterprises, Inc. All rights reserved. +*****************************************************************************/ +CREATE FUNCTION [dbo].[vefn_GetVersionItems](@DocVersionList varchar(MAX)) +RETURNS @VersionItems TABLE +( + VersionID int, + ItemID int, + ContentID int primary key +) +WITH EXECUTE AS OWNER +AS +BEGIN + BEGIN + with Itemz([VersionID], [ItemID], [ContentID]) as + (Select DV.VersionID, [I].[ItemID], [I].[ContentID] + FROM [Items] I + JOIN vefn_DocVersionSplit(@DocVersionList) DV + ON I.[ItemID] = DV.[ItemID] + Union All + -- Children + select Z.VersionID, I.[ItemID], I.[ContentID] + from Itemz Z + join Parts P on P.ContentID = Z.ContentID + join Items I on I.ItemID = P.ItemID + Union All + -- Siblings + select Z.VersionID, I.[ItemID], I.[ContentID] + from Itemz Z + join Items I on I.PreviousID = Z.ItemID + ) + insert into @VersionItems + select VersionID, [ItemID], [ContentID] + from ItemZ I + --Select * From rousages RU Where RU.ContentID in (Select ContentID from ItemZ) + OPTION (MAXRECURSION 10000) + END +RETURN +END + +go +IF (@@Error = 0) PRINT 'TableFunction [vefn_GetVersionItems] Succeeded' +ELSE PRINT 'TableFunction [vefn_GetVersionItems] Error on Creation' + +/****** Object: StoredProcedure [getAffectedRoUsages] ******/ +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getAffectedRoUsages]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [getAffectedRoUsages]; +GO + +/* +getAffectedROUsages 1, '00010000019c0000', 'KBR Test', 'Changed', 'KBR' +*/ +/***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2012 - Volian Enterprises, Inc. All rights reserved. +*****************************************************************************/ +CREATE PROCEDURE [dbo].[getAffectedRoUsages] +( + @RODbID int, + @ROID nvarchar(16), + @RODesc nvarchar(MAX), + @Command nvarchar(10), + @UserID nvarchar(100), + @VersionList nvarchar(MAX) +) +WITH EXECUTE AS OWNER +AS + BEGIN + DECLARE @JustThisVersion TABLE + ( + ContentID int primary key + ) + Insert INTO @JustThisVersion + SELECT Distinct ContentID From vefn_GetVersionItems(@VersionList) + DECLARE @typeID int + SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required' + -- Add "Verification Required" Annotation for each ROUsage + INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID]) + SELECT ItemID, @typeID,'Referenced Object (' + @RODesc + ') ' + @Command,@UserID + FROM Items where CONTENTID in (SELECT ContentID FROM ROUSAGES + where RODbID = @RODbID AND ROID = @ROID AND ContentID in (select ContentID from @JustThisVersion)) + SELECT + [RoUsages].[ROUsageID], + [RoUsages].[ContentID], + [RoUsages].[ROID], + [RoUsages].[Config], + [RoUsages].[DTS], + [RoUsages].[UserID], + [RoUsages].[LastChanged], + [RoUsages].[RODbID], + [Contents].[Number] [Content_Number], + [Contents].[Text] [Content_Text], + [Contents].[Type] [Content_Type], + [Contents].[FormatID] [Content_FormatID], + [Contents].[Config] [Content_Config], + [Contents].[DTS] [Content_DTS], + [Contents].[UserID] [Content_UserID] + FROM [RoUsages] + JOIN [Contents] ON + [Contents].[ContentID]=[RoUsages].[ContentID] + WHERE + [RoUsages].[RODbID]=@RODbID AND [RoUsages].[ROID]=@ROID + AND [Contents].ContentID in (select ContentID from @JustThisVersion) +END +RETURN + +GO +-- Display the status of Proc creation +IF (@@Error = 0) PRINT 'Procedure Creation: getAffectedRoUsages Succeeded' +ELSE PRINT 'Procedure Creation: getAffectedRoUsages Error on Creation' +GO + +/****** Object: StoredProcedure [getAffectedDRoUsages] ******/ +IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[getAffectedDRoUsages]') AND OBJECTPROPERTY(id,N'IsProcedure') = 1) + DROP PROCEDURE [getAffectedDRoUsages]; +GO + +/* +getAffectedDROUsages 1, '00010000019c0000', 'KBR Test', 'Changed', 'KBR' +*/ +/***************************************************************************** + Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE + Copyright 2012 - Volian Enterprises, Inc. All rights reserved. +*****************************************************************************/ +CREATE PROCEDURE [dbo].[getAffectedDRoUsages] +( + @RODbID int, + @ROID nvarchar(16), + @RODesc nvarchar(MAX), + @Command nvarchar(10), + @UserID nvarchar(100), + @VersionList nvarchar(max) +) +WITH EXECUTE AS OWNER +AS + BEGIN + DECLARE @JustThisVersion TABLE + ( + ContentID int primary key + ) + Insert INTO @JustThisVersion + SELECT Distinct ContentID From vefn_GetVersionItems(@VersionList) + DECLARE @typeID int + SELECT @typeID = TypeID from AnnotationTypes where Name = 'Verification Required' + -- Add "Verification Required" Annotation for each ROUsage + INSERT INTO [Annotations] ([ItemID],[TypeID],[SearchText],[UserID]) + SELECT ItemID, @typeID,'Referenced Object (' + @RODesc + ') ' + @Command,@UserID + FROM Items where CONTENTID in (SELECT ContentID + FROM DROUsages DR + JOIN Entries EE on EE.DocID = DR.DocID + where RODbID = @RODbID AND ROID = @ROID AND ContentID in (select ContentID from @JustThisVersion)) + SELECT + [DROUsages].[DROUsageID], + [DROUsages].[DocID], + [DROUsages].[ROID], + [DROUsages].[Config], + [DROUsages].[DTS], + [DROUsages].[UserID], + [DROUsages].[LastChanged], + [DROUsages].[RODbID], + [Documents].[LibTitle] [Document_LibTitle], + [Documents].[DocContent] [Document_DocContent], + [Documents].[DocAscii] [Document_DocAscii], + [Documents].[Config] [Document_Config], + [Documents].[DTS] [Document_DTS], + [Documents].[UserID] [Document_UserID], + [Documents].[FileExtension] [Document_FileExtension] + FROM [DRoUsages] + JOIN [Documents] ON + [Documents].[DocID]=[DROUsages].[DocID] + WHERE + [DRoUsages].[RODbID]=@RODbID AND [DRoUsages].[ROID]=@ROID + AND [Documents].[DocID] in (select EE.DocID from Entries EE where ContentID in (select ContentID from @JustThisVersion)) + RETURN + END +GO +-- Display the status of Proc creation +IF (@@Error = 0) PRINT 'Procedure Creation: getAffectedDRoUsages Succeeded' +ELSE PRINT 'Procedure Creation: getAffectedDRoUsages Error on Creation' +GO + diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/DROUsagesExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/DROUsagesExt.cs index 08e0d3fd..d2a5d18a 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/DROUsagesExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/DROUsagesExt.cs @@ -13,7 +13,7 @@ namespace VEPROMS.CSLA.Library [Serializable()] private class AffectedDROUsagesCriteria { - public AffectedDROUsagesCriteria(int roDbID, string roid, string roDesc, string command, string userID) + public AffectedDROUsagesCriteria(int roDbID, string roid, string roDesc, string command, string userID, string versionList) { _RODbID = roDbID; _ROID = roid; @@ -21,6 +21,12 @@ namespace VEPROMS.CSLA.Library _Command = command; _UserID = userID; } + private string _VersionList; + public string VersionList + { + get { return _VersionList; } + set { _VersionList = value; } + } private int _RODbID; public int RODbID @@ -57,11 +63,11 @@ namespace VEPROMS.CSLA.Library set { _UserID = value; } } } - public static DROUsageInfoList GetAffected(int roDbID, string roid, string roDesc, string command) + public static DROUsageInfoList GetAffected(int roDbID, string roid, string roDesc, string command, string versionList) { try { - DROUsageInfoList tmp = DataPortal.Fetch(new AffectedDROUsagesCriteria(roDbID, roid, roDesc, command, Volian.Base.Library.VlnSettings.UserID)); + DROUsageInfoList tmp = DataPortal.Fetch(new AffectedDROUsagesCriteria(roDbID, roid, roDesc, command, Volian.Base.Library.VlnSettings.UserID, versionList)); DROUsageInfo.AddList(tmp); tmp.AddEvents(); return tmp; @@ -88,6 +94,7 @@ namespace VEPROMS.CSLA.Library cm.Parameters.AddWithValue("@RODesc", criteria.RODesc); cm.Parameters.AddWithValue("@Command", criteria.Command); cm.Parameters.AddWithValue("@UserID", criteria.UserID); + cm.Parameters.AddWithValue("@VersionList", criteria.VersionList); cm.CommandTimeout = Database.DefaultTimeout; using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader())) diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs index 45f4fdf2..6e41b83e 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ROFSTExt.cs @@ -284,6 +284,7 @@ namespace VEPROMS.CSLA.Library { docver.DocVersionAssociations[0].MyROFst = rofst; docver.Save(); + UpdateROValuesText(origROFst, rofst,docver.VersionID.ToString()); return rofst; } @@ -322,7 +323,7 @@ namespace VEPROMS.CSLA.Library } // Now update the usages: compare old to new rofsts and update usages accordingly, i.e. modified // values, deleted ros, etc. - UpdateROValuesText(origROFst, rofst); + UpdateROValuesText(origROFst, rofst, docver.VersionID.ToString()); return rofst; } } @@ -348,7 +349,7 @@ namespace VEPROMS.CSLA.Library } return sb.ToString(); } - private static void UpdateROValuesText(ROFstInfo origROFstInfo, ROFst newROFst) + private static void UpdateROValuesText(ROFstInfo origROFstInfo, ROFst newROFst, string versionList) { ROFSTLookup origLU = new ROFSTLookup(origROFstInfo); ROFSTLookup newLU = new ROFSTLookup(newROFst); @@ -365,7 +366,7 @@ namespace VEPROMS.CSLA.Library // roid's are stored in database as 16 characters long in the rousages table. They may be stored // as 12 characters in the ro.fst. string padroid = chg.Length <= 12 ? chg + "0000" : chg; - using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed")) + using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid, desc, "Changed", versionList)) { foreach (RoUsageInfo roUsg in affected) { @@ -398,7 +399,7 @@ namespace VEPROMS.CSLA.Library // roid's are stored in database as 16 characters long in the rousages table. They may be stored // as 12 characters in the ro.fst. string padroid = chg.Length <= 12 ? chg + "0000" : chg; - using (DROUsageInfoList affected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid.Substring(0,12), desc, "Changed")) + using (DROUsageInfoList affected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroid.Substring(0, 12), desc, "Changed", versionList)) { foreach (DROUsageInfo droUsg in affected) { @@ -411,7 +412,7 @@ namespace VEPROMS.CSLA.Library { string desc = string.Format("Deleted RO: Value = {0}", origLU.GetRoValue(del)); string padroiddel = del.Length <= 12 ? del + "0000" : del; - using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted")) + using (RoUsageInfoList affected = RoUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, padroiddel, desc, "Deleted",versionList)) { foreach (RoUsageInfo roUsg in affected) { @@ -428,7 +429,7 @@ namespace VEPROMS.CSLA.Library } } } - using (DROUsageInfoList Daffected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, del.Substring(0,12), desc, "Deleted")) + using (DROUsageInfoList Daffected = DROUsageInfoList.GetAffected(origROFstInfo.MyRODb.RODbID, del.Substring(0, 12), desc, "Deleted", versionList)) { foreach (DROUsageInfo droUsg in Daffected) { diff --git a/PROMS/VEPROMS.CSLA.Library/Extension/ROUsagesExt.cs b/PROMS/VEPROMS.CSLA.Library/Extension/ROUsagesExt.cs index 384bf06d..ecda5210 100644 --- a/PROMS/VEPROMS.CSLA.Library/Extension/ROUsagesExt.cs +++ b/PROMS/VEPROMS.CSLA.Library/Extension/ROUsagesExt.cs @@ -13,13 +13,20 @@ namespace VEPROMS.CSLA.Library [Serializable()] private class AffectedROUsagesCriteria { - public AffectedROUsagesCriteria(int roDbID, string roid, string roDesc, string command, string userID) + public AffectedROUsagesCriteria(int roDbID, string roid, string roDesc, string command, string userID, string versionList) { _RODbID = roDbID; _ROID = roid; _RODesc = roDesc; _Command = command; _UserID = userID; + _VersionList = versionList; + } + private string _VersionList; + public string VersionList + { + get { return _VersionList; } + set { _VersionList = value; } } private int _RODbID; @@ -57,11 +64,11 @@ namespace VEPROMS.CSLA.Library set { _UserID = value; } } } - public static RoUsageInfoList GetAffected(int roDbID, string roid, string roDesc, string command) + public static RoUsageInfoList GetAffected(int roDbID, string roid, string roDesc, string command, string versionList) { try { - RoUsageInfoList tmp = DataPortal.Fetch(new AffectedROUsagesCriteria(roDbID, roid, roDesc, command, Volian.Base.Library.VlnSettings.UserID)); + RoUsageInfoList tmp = DataPortal.Fetch(new AffectedROUsagesCriteria(roDbID, roid, roDesc, command, Volian.Base.Library.VlnSettings.UserID,versionList)); RoUsageInfo.AddList(tmp); tmp.AddEvents(); return tmp; @@ -88,6 +95,7 @@ namespace VEPROMS.CSLA.Library cm.Parameters.AddWithValue("@RODesc", criteria.RODesc); cm.Parameters.AddWithValue("@Command", criteria.Command); cm.Parameters.AddWithValue("@UserID", criteria.UserID); + cm.Parameters.AddWithValue("@VersionList", criteria.VersionList); cm.CommandTimeout = Database.DefaultTimeout; using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))