Write a job that reads your parameter names and values and writes them to a hash file with ParamName as the key. Next use this routine to start your job.
I took their routine and cleaned it up so it is easier to understand. If you cannot understand this then give up.
This is the way to run a job from routine activity. I plan on including something like this with ParameterNavigator only you can choose a parameter set of values at run time like DEV, TEST or PROD. So the same code works in DEV, TEST and PROD. Read and edit the values out of a database.
Code: Select all
* ------------------------------------------------------------
* KimRunJobRtn(JobName, WarnFlag, ParamFile)
* Decription: Run a job. Set param value from KimParamsHash
* Written by: Kim Duke
* Notes:
* ------------------------------------------------------------
$INCLUDE DSINCLUDE JOBCONTROL.H
Deffun DSRTimestamp Calling "DSR_TIMESTAMP"
* WarnFlag = @FALSE
* ------------------------------------------------------------
Ans = @FALSE
RoutineName = 'KimRunJobRtn'
JobStartTime = DSRTimestamp()
JobHandle = DSAttachJob(JobName, DSJ.ERRFATAL)
* ------------------------------------------------------------
open ParamFile to ParamFilePtr else
Message = "Error: Unable to open hash file: " : ParamFile
Call DSLogInfo(Message, RoutineName)
goto TheEnd
end
* ------------------------------------------------------------
DsErrCode = DSPrepareJob(JobHandle)
RowLimit = 0
WarnLimit = 0
DsErrCode = DSSetJobLimit(JobHandle, DSJ.LIMITROWS, RowLimit)
DsErrCode = DSSetJobLimit(JobHandle, DSJ.LIMITWARN, WarnLimit)
ParamNameList = DSGetJobInfo(JobHandle, DSJ.ParamNameList)
ParamCount = Dcount(ParamNameList, ',')
For ParamNum = 1 To ParamCount
ParamName = field(ParamNameList, ",", ParamNum)
Read ParamValueRec From ParamFilePtr, ParamName Then
ParamValue = ParamValueRec<1>
Message = "Setting: " : ParamName :" = ": ParamValue
Call DSLogInfo(Message, RoutineName)
DsErrCode = DSSetParam(JobHandle, ParamName, ParamValue)
End
Next ParamNum
DsErrCode = DSRunJob(JobHandle, DSJ.RUNNORMAL)
DsErrCode = DSWaitForJob(JobHandle)
JobStatus = DSGetJobInfo(JobHandle, DSJ.JOBSTATUS)
JobEndTime = DSRTimestamp()
Begin Case
Case JobStatus = DSJS.RUNFAILED
Message = "Job Failed: " : JobName
Call DSLogWarn(Message, RoutineName)
Case JobStatus = DSJS.RUNWARN and WarnFlag
Message = "Job had warnings: " : JobName
Call DSLogWarn(Message, RoutineName)
Case JobStatus = DSJS.RUNOK
Ans = @TRUE
End Case
* ------------------------------------------------------------
* Retrieve more information about this job run.
* ------------------------------------------------------------
Message = 'Getting job statistics'
Call DSLogInfo(Message, RoutineName)
StageNameList = DSGetJobInfo(JobHandle, DSJ.StageNameList)
Message = 'List of Stages = ' : StageNameList
Call DSLogInfo(Message, RoutineName)
StageCount = Dcount(StageNameList, ',')
RowCountRec = ""
RowCountRec<1> = JobName
RowCountRec<2> = "Start Time: " : JobStartTime
RowCountRec<3> = "End Time : " : JobEndTime
FOR StageNum = 1 To StageCount
* ------------------------------------------------------------
* Get links on this stage.
* ------------------------------------------------------------
StageName = Field(StageNameList, ',', StageNum)
LinkNameList = DSGetStageInfo(JobHandle, StageName, DSJ.LINKLIST)
Message = 'LinkNameList for Stage. ' : StageName :@FM: LinkNameList
Call DSLogInfo(Message, RoutineName)
LinkCount = Dcount(LinkNameList, ',')
For LinkNum = 1 To LinkCount
LinkName = Field(LinkNameList, ',', LinkNum)
* ------------------------------------------------------------
* Get Rowcount For this linkname
* ------------------------------------------------------------
RowCount = DSGetLinkInfo(JobHandle, StageName, LinkName, DSJ.LINKROWCOUNT)
Message = 'RowCount for ' : StageName :".": LinkName :" = ": RowCount
Call DSLogInfo(Message, RoutineName)
RowCountRec<-1> = StageName :'.': LinkName :' = ': RowCount
Next LinkNum
Next StageNum
Message = 'RunJob Status = ' : RowCountRec
Call DSLogInfo(Message, RoutineName)
* Ans = @TRUE
* ------------------------------------------------------------
TheEnd: