在Caché中,可以设置定时执行的任务,即执行一个类方法或者Routine函数。以下内容来自Caché帮助文档中类参考(Class Reference)中的%System.Task。由于原文比较简单,就不翻译了。但有时候数据库的其它问题会影响到任务的执行,我就遇到过,建好的任务从某天起不能运行了,之前数据库有过改动,由于是生成库,就没有查找原因,希望使用任务的朋友注意这个问题。
The following example schedules a subroutine call with no parameters (e.g. DO GETDATA^TEST). It is scheduled (by default) to run every day at 12 midnight.
s x=##Class(%SYSTEM.Task).%New() s x.Name="Test Task" s x.ExecuteCode="Do GETDATA^TEST" S x.NameSpace="USER" s rc=x.%Save()
The following example schedules a Function call with 2 parameters (e.g. s Status=$$GETDATA^TEST("TESTSTRING1",20)). It is scheduled to run every day at 4 am.
s x=##Class(%SYSTEM.Task).%New() s x.Name="Test Task" s x.NameSpace="USER" ; Assign to namespace s x.ExecuteCode="s Status=$$GETDATA^TEST(""TESTSTRING1"",20)" s x.DailyStartTime=14400 ;Start at 4 am. s rc=x.%Save() The following example schedules a Function call with 2 parameters (e.g. s Status=$$GETDATA^TEST("TESTSTRING1",20)). It is scheduled to run once an hour every day between 8 am and 5 pm.
s x=##Class(%SYSTEM.Task).%New() s x.Name="Test Task" s x.NameSpace="USER" ; Assign to namespace s x.ExecuteCode="Set Status=$$GETDATA^TEST(""TestString"",20)" s x.DailyFrequency=1 ;Several times a day s x.DailyFrequencyTime=1 ;hourly s x.DailyIncrement=1 ;Every hour s x.DailyStartTime=28800 ;Start at 8:00 am s x.DailyEndTime=61200 ;Until 5:00 pm s rc=x.%Save() The following example schedules a Function call with no parameters (e.g. s Status=$$GETDATA^TEST()). It is scheduled to run once a week on Monday at 8 am.
s x=##Class(%SYSTEM.Task).%New() s x.Name="Test Task" s x.NameSpace="USER" ; Assign to namespace s x.ExecuteCode="S Status=$$GETDATA^TEST()" s x.TimePeriod=1 ;Weekly s x.TimePeriodEvery=1 ;Every week s x.TimePeriodDay=2 ;On Monday s x.DailyStartTime=28800 ; At 8:00 am s rc=x.%Save() The following example schedules a Function call with no parameters (e.g. s Status=$$GETDATA^TEST()). It is scheduled to run the last day of every month at 8 am and 5 pm.
s x=##Class(%SYSTEM.Task).%New() s x.Name="Test Task" s x.NameSpace="USER" ; Assign to namespace s x.ExecuteCode="Set Status=$$GETDATA^TEST()" s x.TimePeriod=2 ;Monthly s x.TimePeriodEvery=1 ;Every Month s x.TimePeriodDay=31 ;On the last day s x.DailyStartTime=28800 ;At 8:00 am s x.DailyFrequency=1 ;Several times a day s x.DailyFrequencyTime=1 ;hourly s x.DailyIncrement=9 ;Every 9 hours s x.DailyEndTime=61200 ;Until 5:00 pm s rc=x.%Save()