2011-04-29 16 views
0

問題Sitecore的調度參數

目前,我試圖安裝使用調度和指令在數據庫中Sitecore的計劃任務。

到目前爲止,我已經跟着http://sdn.sitecore.net/FAQ/Administration/Scheduled%20tasks.aspx獲得了我所需要的大部分。他們的方法使用:public void WriteToLogFile(Item[] itemArray, CommandItem commandItem, ScheduleItem scheduledItem)。我假設這是在計劃項目中傳遞的項目,命令項目本身和計劃項目本身。

我有一個遵循相同語法的運行函數:protected void run(Item[] itemArray, CommandItem commandItem, ScheduleItem scheduleditem)。雖然它在我的日誌中運行,但我收到了一個異常。鏈接是異常堆棧:http://pastie.org/1847345,但這裏是嵌入異常:

Exception: System.NullReferenceException 
Message: Object reference not set to an instance of an object. 
Source: fhservices at fhservices.twitterPull.run(Item[] itemArray, CommandItem commandItem, ScheduleItem scheduleditem) 

我試過的參數的幾個不同的組合,沒有運氣接受。

調度web.config部分,:

<scheduling> 
    <!-- Time between checking for scheduled tasks waiting to execute --> 
    <frequency>00:01:00</frequency> 
    <!-- Agent to process schedules embedded as items in a database --> 
    <agent type="Sitecore.Tasks.DatabaseAgent" method="Run" interval="00:02:00"> 
    <param desc="database">core</param> 
    <param desc="schedule root">/sitecore/system/tasks/schedules</param> 
    <LogActivity>true</LogActivity> 
    </agent> 
... 

會有人知道,Sitecore的參數與通過啓動作業的這個方法調用的方法發送?

回答

1

根據您在SDN上鍊接的代碼段,我認爲您可以創建自己的方法,類似於WriteToLogFile,但不是Run()。第4步說:

填寫必要的字段:

類型:CustomScheduleTasks.Task1,CustomScheduleTasks

方法:WriteToLogFile

類型指示命名空間和裝配文件。 Method指示調用指定類的方法。

您的命令現在已準備好用作計劃任務。

因此,而不是你的Run()方法,將其命名爲別的,並將其設置在Sitecore的命令的Method領域。 Run()是運行的Sitecore的DatabaseAgent中的方法。

+0

爲了不成爲可能的保留字,我將其改爲了其他內容。我們會看看它是如何發展的。 – al3xnull 2011-05-02 12:29:29

+0

說實話,我認爲這可能解決了它? 1.我改變了名字爲 的方法2.我在相關的命令中改變了它。 3.有一個問題,因爲我相信VS沒有構建調試版本。 4.用正確的版本替換文件。 5.嘗試設置斷點調試並添加對我的Sitecore項目的引用。 6.去物品檢查它是否運行,它已經。 7.看着日誌,它一路成功。 - 除名稱和相關命令外,沒有其他代碼被更改。 不確定它是否'運行',但這似乎解決了它。 – al3xnull 2011-05-02 13:28:34

+0

好吧,我很高興它現在的工作! – 2011-05-02 13:44:04

0

那麼......你的方法定義是「運行」,小r。但是在web.config中,你已經得到了Run,大R,Sitecore在這裏使用.Net反射來查找方法,因此它將區分大小寫。

我有我的計劃任務設置在系統/任務而不是web.config。奇蹟般有效。

+0

是的。我也在使用系統/任務。我相信我的代碼中有些東西是錯誤的。 我的任務也設置爲「運行」方法。大寫字母'R'只是DatabaseAgent的代理,SiteCore運行所有系統/任務。 如果您可以回答Alistar回答的問題,如果您知道如何做到這一點,它可能會幫助我。 謝謝! – al3xnull 2011-05-02 12:25:54

1

看起來您的任務實際上正在運行。這個異常沒有提及任何關於不能找到你的方法,異常來自你的任務方法。嘗試在方法內設置斷點並檢查哪些對象爲空。

僅供參考,傳遞給計劃任務的參數是在命令的項目字段,命令定義項目和計劃定義項目中指定的項目。

+0

這就是我的想法。也許愚蠢的問題,但我對.Net很新。它是在項目之外編譯的DLL,有沒有辦法讓我可以設置一個斷點並且能夠調試? 猜猜我在這上面掛了,不用問我是否可以這樣做。 – al3xnull 2011-05-02 12:22:33

+0

Alistair,如果決定撰寫博客文章或發送個人電子郵件,我仍然有興趣瞭解如何在Sitecore項目中調試.dll項目,我將非常感激。感謝您的幫助。 – al3xnull 2011-05-02 13:30:21

+0

是的,你可以很容易地調試。只要確保你正在做一個調試版本,這樣你就可以用你的DLL在bin目錄下得到.pdb文件。這些是調試器需要的調試符號。然後在Visual Studio中使用「附加到進程」並附加到您的ASP.NET輔助進程...這將取決於您的IIS版本。現在設置你的斷點,瞧。 – Bryan 2011-05-02 18:02:00