USP_DATAFORMTEMPLATE_EDIT_CYCLE
The save procedure used by the edit dataform template "Cycle Edit Data Form".
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@ID | uniqueidentifier | IN | The input ID parameter indicating the ID of the record being edited. |
@CHANGEAGENTID | uniqueidentifier | IN | Input parameter indicating the ID of the change agent invoking the procedure. |
@NAME | nvarchar(100) | IN | Name |
@DESCRIPTION | nvarchar(255) | IN | Description |
@CYCLEDAYS | xml | IN | Cycle day |
Definition
Copy
CREATE procedure dbo.USP_DATAFORMTEMPLATE_EDIT_CYCLE (
@ID uniqueidentifier,
@CHANGEAGENTID uniqueidentifier = null,
@NAME nvarchar(100),
@DESCRIPTION nvarchar(255),
@CYCLEDAYS xml
)
as
set nocount on;
if @CHANGEAGENTID is null
exec dbo.USP_CHANGEAGENT_GETORCREATECHANGEAGENT @CHANGEAGENTID output
declare @CURRENTDATE datetime
set @CURRENTDATE = getdate()
begin try
-- handle updating the data
update dbo.CYCLE set
CYCLE.NAME = @NAME,
CYCLE.DESCRIPTION = @DESCRIPTION,
CYCLE.CHANGEDBYID = @CHANGEAGENTID,
CYCLE.DATECHANGED = @CURRENTDATE
where CYCLE.ID = @ID
declare @contextCache varbinary(128);
/* cache current context information */
set @contextCache = CONTEXT_INFO();
/* set CONTEXT_INFO to @CHANGEAGENTID */
if not @CHANGEAGENTID is null
set CONTEXT_INFO @CHANGEAGENTID
delete
PATTERNBLOCKMEETING
from
PATTERNBLOCKMEETING
inner join
TIMETABLEDAY on TIMETABLEDAY.ID = PATTERNBLOCKMEETING.TIMETABLEDAYID
inner join
TIMETABLE on TIMETABLE.ID = TIMETABLEDAY.TIMETABLEID
where
TIMETABLE.CYCLEID = @ID
and TIMETABLEDAY.CYCLEDAYID not in (select ID from dbo.UFN_CYCLEDAY_GETCYCLEDAY_FROMITEMLISTXML(@CYCLEDAYS))
--remove empty pattern blocks
exec dbo.USP_PATTERNBLOCK_UNUSED_DELETE @CHANGEAGENTID
delete
SCHEDULEDATE
from
SCHEDULEDATE
inner join TIMETABLEDAY
on TIMETABLEDAY.ID = SCHEDULEDATE.TIMETABLEDAYID
inner join TIMETABLE
on TIMETABLE.ID = TIMETABLEDAY.TIMETABLEID
where
TIMETABLE.CYCLEID = @ID
and TIMETABLEDAY.CYCLEDAYID not in (select ID from dbo.UFN_CYCLEDAY_GETCYCLEDAY_FROMITEMLISTXML(@CYCLEDAYS))
delete
TIMETABLEDAY
from
TIMETABLEDAY
inner join
TIMETABLE on TIMETABLE.ID = TIMETABLEDAY.TIMETABLEID
where
TIMETABLE.CYCLEID = @ID
and TIMETABLEDAY.CYCLEDAYID not in (select ID from dbo.UFN_CYCLEDAY_GETCYCLEDAY_FROMITEMLISTXML(@CYCLEDAYS))
/* reset CONTEXT_INFO to previous value */
if not @contextCache is null
set CONTEXT_INFO @contextCache
exec dbo.USP_CYCLEDAY_GETCYCLEDAY_UPDATEFROMXML @ID, @CYCLEDAYS, @CHANGEAGENTID;
if not exists(select ID from dbo.CYCLEDAY where CYCLEID = @ID)
raiserror('BBERR_CYCLE_ATLEASTONECYCLEDAY', 13, 1)
insert into dbo.TIMETABLEDAY
(ID, TIMETABLEID, CYCLEDAYID, ADDEDBYID, CHANGEDBYID, DATEADDED, DATECHANGED)
select
newid(),
TIMETABLE.ID,
CYCLEDAY.ID,
@CHANGEAGENTID,
@CHANGEAGENTID,
@CURRENTDATE,
@CURRENTDATE
from
CYCLEDAY
inner join CYCLE
on CYCLE.ID = CYCLEDAY.CYCLEID
inner join TIMETABLE
on TIMETABLE.CYCLEID = CYCLE.ID
where
CYCLEDAY.CYCLEID = @ID
and not exists (select TIMETABLEDAY.ID
from TIMETABLEDAY
inner join TIMETABLE on TIMETABLE.CYCLEID = @ID
where TIMETABLEDAY.CYCLEDAYID = CYCLEDAY.ID)
--recreate calendar entries
declare @TempTbl table (
[ROWID] int identity(1,1),
[TERMID] uniqueidentifier)
insert into @TempTbl (TERMID)
select
TERM.[ID]
from
TERM
inner join SESSION
on SESSION.id = TERM.SESSIONID
inner join TIMETABLE
on TIMETABLE.id = SESSION.TIMETABLEID
inner join CYCLE
on CYCLE.ID = TIMETABLE.CYCLEID
where CYCLE.ID = @ID
declare @rowId int
declare @maxRowId int
declare @TERMID uniqueidentifier = null
select
@rowId = min(ROWID),
@MaxRowId = max(ROWID)
from @TempTbl
while @RowId <= @MaxRowId
begin
select
@TERMID = TERMID
from
@TempTbl
where
ROWID = @RowId
exec dbo.USP_SCHEDULEDATE_ADJUSTENTRIES @TERMID, null, null, null, @CHANGEAGENTID
set @RowId = @RowId + 1
end
end try
begin catch
exec dbo.USP_RAISE_ERROR
return 1
end catch
return 0;