99-- Note: IT1 assumes a Resource exists in a single Node location.
1010-- 21-12-2021 RS Fix to NodeResource update when republishing unpublished resource.
1111-- 09-02-2022 KD Explicitly exclude External Orgs from Resource Reference processing.
12+ -- 20-09-2024 SS Multiple Node path scenario handled when external reference is present in catalogue
1213-- -----------------------------------------------------------------------------
1314CREATE PROCEDURE [hierarchy].[NodeResourcePublish]
1415(
@@ -27,12 +28,15 @@ BEGIN
2728 -- IT1 - NodePath can be obtained from the NodeId
2829 -- IT2 - NodePath to be supplied as param
2930 DECLARE @NodePathId int
30-
31- SELECT @NodePathId = Id
31+ DECLARE @NodePathIds table (NodePathId int )
32+ INSERT INTO @NodePathIds (NodePathId)
33+ SELECT Id
3234 FROM hierarchy .NodePath
3335 WHERE NodeId = @NodeId AND Deleted = 0 AND IsActive = 1
3436
35- IF @NodePathId IS NULL
37+ DECLARE ResourceReferenceCursor CURSOR FOR SELECT NodePathId FROM @NodePathIds
38+ OPEN ResourceReferenceCursor
39+ IF NOT EXISTS (SELECT 1 FROM @NodePathIds)
3640 BEGIN
3741 RAISERROR (' NodeResourcePublish: Error - An active NodePath is required' , -- Message text.
3842 16 , -- Severity.
@@ -166,24 +170,43 @@ BEGIN
166170
167171 IF @OriginalResourceReferenceId IS NULL
168172 BEGIN
169- INSERT INTO resources .ResourceReference (ResourceId, NodePathId, OriginalResourceReferenceId, Deleted, CreateUserId, CreateDate, AmendUserId, AmendDate)
170- VALUES (@ResourceId, @NodePathId, NULL , 0 , @AmendUserId, @AmendDate, @AmendUserId, @AmendDate)
173+ FETCH NEXT FROM ResourceReferenceCursor INTO @NodePathId;
174+ WHILE @@FETCH_STATUS = 0
175+ BEGIN
176+ INSERT INTO resources .ResourceReference (ResourceId, NodePathId, OriginalResourceReferenceId, Deleted, CreateUserId, CreateDate, AmendUserId, AmendDate)
177+ VALUES (@ResourceId, @NodePathId, NULL , 0 , @AmendUserId, @AmendDate, @AmendUserId, @AmendDate)
178+
179+ UPDATE rr
180+ SET OriginalResourceReferenceId = Id
181+ FROM resources .ResourceReference rr
182+ WHERE Id = SCOPE_IDENTITY () AND OriginalResourceReferenceId IS NULL
171183
172- UPDATE rr
173- SET OriginalResourceReferenceId = Id
174- FROM resources .ResourceReference rr
175- WHERE Id = SCOPE_IDENTITY () AND OriginalResourceReferenceId IS NULL
184+ FETCH NEXT FROM ResourceReferenceCursor INTO @NodePathId;
185+
186+ END
187+ CLOSE ResourceReferenceCursor;
188+
176189 END
177190 ELSE
178191 BEGIN
179- INSERT INTO resources .ResourceReference (ResourceId, NodePathId, OriginalResourceReferenceId, Deleted, CreateUserId, CreateDate, AmendUserId, AmendDate)
180- VALUES (@ResourceId, @NodePathId, @OriginalResourceReferenceId, 0 , @AmendUserId, @AmendDate, @AmendUserId, @AmendDate)
192+ FETCH NEXT FROM ResourceReferenceCursor INTO @NodePathId;
193+ WHILE @@FETCH_STATUS = 0
194+ BEGIN
195+
196+ INSERT INTO resources .ResourceReference (ResourceId, NodePathId, OriginalResourceReferenceId, Deleted, CreateUserId, CreateDate, AmendUserId, AmendDate)
197+ VALUES (@ResourceId, @NodePathId, @OriginalResourceReferenceId, 0 , @AmendUserId, @AmendDate, @AmendUserId, @AmendDate)
181198
182- UPDATE resources .ResourceReference
183- SET Deleted = 1
184- WHERE Id = @ExistingResourceReferenceId
185- END
199+ UPDATE resources .ResourceReference
200+ SET Deleted = 1
201+ WHERE Id = @ExistingResourceReferenceId
202+
203+ FETCH NEXT FROM ResourceReferenceCursor INTO @NodePathId;
186204
205+ END
206+ CLOSE ResourceReferenceCursor;
207+
208+ END
209+ DEALLOCATE ResourceReferenceCursor;
187210 -- --------------------------------------------------------
188211 -- NodeResourceLookup
189212 -- --------------------------------------------------------
0 commit comments