USP_CLONESITE_FORM
Handle the copy of Form part in cloning CMS website
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@SourceClientSitesID | int | IN | |
@TargetClientSitesID | int | IN | |
@CurrentUserID | int | IN | |
@CopyBatchGuid | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_CLONESITE_FORM
(
@SourceClientSitesID int,
@TargetClientSitesID int,
@CurrentUserID int,
@CopyBatchGuid uniqueidentifier
)
as
begin
-- duplicate rows in APEXFORM related to @sourceClientSiteID
declare @CHANGEAGENTID uniqueidentifier
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
insert into dbo.APEXFORM
(ID, NAME, LAYOUT, ISDEFAULT, FORMTYPEID, OWNERID, SITEID,COPYSOURCEID, COPYBATCHGUID, ADDEDBYID, CHANGEDBYID)
select NEWID()
, NAME
, LAYOUT
, ISDEFAULT
, FORMTYPEID
, OWNERID
, @TargetClientSitesID
, ID
, @CopyBatchGuid
, @CHANGEAGENTID
, @CHANGEAGENTID
from dbo.APEXFORM AF
WHERE AF.SITEID = @SourceClientSitesID;
--need to deal with attributes inside APEXFORM.LAYOUT xml
--PageLinkID for login element
/* declare @ElementUIDescriptor as table(ID uniqueidentifier, displayConfig varchar(max), pageID int NULL, newPageID int NULL)
insert into @ElementUIDescriptor
select AF.ID
,cast(layout.query('
for $ElementUIDescriptor in /FormLayout/FormStepList/FormStep/SectionList/FormSection/ElementUIDescriptorList/ElementUIDescriptor
where $ElementUIDescriptor/@DisplayControlPath="ApexUserLogin.ascx"
return $ElementUIDescriptor/DisplayConfig/text()'
) as nvarchar(max))
,NULL
,NULL
from dbo.APEXFORM AF
where AF.SITEID = @TargetClientSitesID
and AF.COPYBATCHGUID = @CopyBatchGuid
and convert(varchar(max), layout) like '%ApexUserLogin.ascx%';
--then retrieve the value of PageLinkId and switch to new site
update @ElementUIDescriptor
set pageID = cast(dbo.UFN_UTIL_GETVALUEBYNAMEINJSON(displayConfig, 'PageLinkId') as int);
update E
set newPageID = SP.ID
from @ElementUIDescriptor E
inner join dbo.SitePages SP
on E.pageID = SP.CopySourceID
where SP.ClientSitesID = @TargetClientSitesID
and SP.CopyBatchGUID = @CopyBatchGuid;
--ready to swap it back: instead of looping xml.modify(), just use good old replace()
update AF
set LAYOUT = cast(
replace(
cast(layout as nvarchar(max))
,E.displayConfig
,replace(E.displayConfig, '"PageLinkId":"'+CAST(E.pageID as varchar(50)), '"PageLinkId":"'+CAST(E.newPageID as varchar(50)) )
)
as xml)
from dbo.APEXFORM AF
inner join @ElementUIDescriptor E
on AF.ID = E.ID
and AF.COPYBATCHGUID = @CopyBatchGuid;
*/
-- copy part config data in APEXFORMCONTENT
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
insert into dbo.APEXFORMCONTENT
(ID, FORMID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select SC2.Guid, F.ID, @CHANGEAGENTID, @CHANGEAGENTID, @CURRENTDATE, @CURRENTDATE from APEXFORMCONTENT FC
inner join SiteContent SC
on FC.ID = SC.Guid and SC.ClientSitesID = @SourceClientSitesID
inner join SiteContent SC2
on SC2.CopyBatchGUID = @CopyBatchGuid
and SC.ID = SC2.CopySourceID and SC2.ClientSitesID = @TargetClientSitesID
inner join APEXFORM F
on F.COPYSOURCEID = FC.FORMID and F.COPYBATCHGUID = @CopyBatchGuid and F.SITEID = @TargetClientSitesID
end