@JOBID int, @SCHID int, @MAXLEVELS int 
AS
BEGIN
SET NOCOUNT ON
SET XACT_ABORT ON
/*
declare @JOBID int
declare @SCHID int
declare @MAXLEVELS int
Set @JOBID = 100
Set @SCHID = 1
Set @MAXLEVELS = 100


exec [dbo].[EZViewer_CA7_Get_Graph_Forward] 100 , 1, 100 
*/


		  DECLARE @LEVEL int = 1
		  DECLARE @RC int = 0
		  DECLARE @StartNode int

		  SET @StartNode = @JOBID
		  SET @MAXLEVELS  = COALESCE(@MAXLEVELS, 100)
		  IF @MAXLEVELS > 1000 Set @MAXLEVELS = 1000


		  IF OBJECT_ID('tempdb..#Discovered') IS NOT NULL DROP TABLE #Discovered
		  CREATE TABLE #Discovered (
								src int,
								tgt int,
								ord int,
								ssid int,
								tsid int )


           INSERT INTO #Discovered (src, tgt, ord, tsid) VALUES (null, @StartNode, 0, @SCHID)


		  SET @RC = 1
		  WHILE @RC > 0 AND @MAXLEVELS > @LEVEL
		  BEGIN
			   SET @LEVEL = @LEVEL + 1
	
			  INSERT INTO #Discovered (src, tgt, ord, ssid, tsid)
			  SELECT e.TriggeredBy_JobID, 
				    e.JobID, 
				    MIN(d.ord) + 1, 
				    CASE WHEN e.inSCHID = 0 THEN -ABS(d.tsid) 
				         ELSE e.inSCHID 
				     END, 
					/*  CASE WHEN e.outSCHID = 0 then 
						  case when e.inSCHID = 0 then -abs(d.tsid) else e.inSCHID end 
					  else e.outSCHID end */
                          CASE WHEN e.outSCHID = 0 AND e.inSCHID = 0 THEN -ABS(d.tsid)
					      WHEN e.outSCHID = 0 THEN e.inSCHID
						 ELSE e.outSCHID 
						 END 
			  FROM #Discovered d 
				  INNER JOIN CA7_JobsTriggeredByJobs e ON d.tgt = e.TriggeredBy_JobID AND	( e.inSCHID = 0
																			    OR 	
																			    abs(d.tsid) = e.inSCHID
																			 )
			  WHERE NOT EXISTS ( SELECT 1 
							 FROM #Discovered   dd 
							 WHERE e.TriggeredBy_JobID = dd.src and
								   e.JobID = dd.tgt)
			  GROUP BY e.JobID, e.TriggeredBy_JobID, d.tsid, e.inSCHID, e.outSCHID

			  SET @RC = @@ROWCOUNT

		  END


		  SELECT * 
		  FROM #Discovered 
	
            DROP TABLE #Discovered

END