專利名稱:允許元編程的最優增量工作流執行的制作方法
技術領域:
本發明一般涉及工作流,尤其涉及允許元編程的最優增量工作流執行。
背景技術:
工作流系統表示過程管理技術的應用。工作流是定義過程或程序的操作方面的有組織的互相關任務集。具體而言,工作流可定義任務如何結構化、負責實體以及任務的相對排序等。因此,工作流方便過程的自動化設計、控制和監視。一種公知工作流是企業工作流,該企業工作流自動化業務過程以使得文檔、信息和/或任務被傳遞至各個人以便根據程序規則來行動。例如,一個人可以按順序執行某一指定工作,并且隨后在完成時可啟動其他人的工作。實際上,工作的傳遞基于先前任務的完成來自動化和控制。作為示例,貸款評估或批準過程可被表示為工作流。還能夠在計算機系統及相關聯的功能,而不是單獨的人類相關任務的上下文中采用工作流。作為示例,可采用被稱為構建系統(build system)的專用工作流系統來方便程序開發。構建系統使得能夠像構建那樣腳本化并執行各種各樣的程序開發任務,包括將源代碼編譯成二進制代碼、測試和開發,等等。雖然從命令提示中調用對單個文件的開發操作是容易的,但類似地對通常是具有復雜依賴關系的大量文件發起這些操作是呈指數地更加困難的。構建系統被設計成通過使開發者能夠描述并且隨后數次發起對各自具有特定功能的分立代碼單元的一系列調用的執行來幫助該情形。例如,構建系統可允許在對一個或多個組件源文件作出改變時快速重新編譯程序。具體而言,工作流和構建當前利用域專用語言或標記語言來指定。域專用語言 (DSL)是被設計成在特定域中工作的專用語言。例如,經常采用允許非技術人員查看并操縱過程的圖形DSL。諸如XML(可擴展標記語言)等標記語言是用于通過文本注釋來表示結構化數據的數據描述語言。
發明內容
下面呈現了摘要,以便提供所公開的主題的某些方面的基本概念。本發明內容不是廣泛性的概觀。它并不旨在標識關鍵/重要元素,也不旨在描繪所要求保護的主題的范圍。其唯一的目的是以簡化形式呈現一些概念,作為稍后呈現的更詳細描述的序言。簡而言之,本發明一般涉及工作流,包括工作流的構造和執行。工作流能夠用通用編程語言來通過程序描述和構造。特別地,這一構造允許采用元編程來觀察、推理、修改和 /或生成工作流。工作流任務和項目依賴關系能夠由工作流來顯式表達并用于特別地優化工作流執行。例如,可以分割任務以便按照項目和任務依賴關系來跨多個處理器和/或計算機并發執行。另外,在發生對工作流或其分量的改變時,可利用依賴關系來將重新執行限于該工作流中由該改變影響的各部分。此外,關于工作流執行狀態的消息可攜帶附加類型信息以允許以結構化方式展示消息以便高效地向用戶傳達信息。還公開了涉及撤消操作以及與常規工作流系統的可互操作性的功能。 為實現上述及相關目的,在此結合以下描述和附圖描述了所要求保護的主題的某些說明性方面。這些方面指示可實踐本主題的各種方式,它們均落在所要求保護的主題的范圍之內。當結合附圖閱讀以下詳細描述時,本發明的其他優點和新穎特征將變得顯而易見。
圖1是工作流系統的框圖。
圖2是工作流節點實例和關系的圖形表示。
圖3是可由通用程序產生的代表性工作流對象圖。
圖4是代表性調度組件的框圖。
圖5是代表性記錄組件的框圖。
圖6是可用于記錄工作流消息的示例性用戶界面的屏幕截圖。
圖7是代表性改變檢測組件的框圖。
圖8是包括測試和設置組件的工作流系統的框圖。
圖9是通過程序創建工作流的方法的流程圖。
圖10是初始工作流執行的方法的流程圖。
圖11是在改變后重新執行工作流的方法的流程圖。
圖12是改變檢測的方法的流程圖。
圖13是對已改變的工作流執行動作的方法的流程圖。
圖14是包括調度任務以便執行的工作流執行方法的流程圖。
圖15是任務執行方法的流程圖。
圖16是示出用于本發明各方面的合適的操作環境的示意性框圖。
具體實施例方式以下細節一般涉及工作流,包括工作流的構造和執行。工作流可由通用程序來構造以利用通用編程語言的可表達性,包括特定語言特征或編碼技術,諸如但不限于,繼承、 參數化和條件,以及與其相關聯的常規工具,諸如調式器、類型校驗器和代碼優化器,等等。 此外,可以例如執行元編程以觀察、推理、修改和/或生成工作流。包括表示項目和任務的互相關節點集的通過程序構造的工作流能夠從開始到結束增量式地執行。此外,項目和任務依賴關系能夠在該工作流中顯式表達并且可用來特別地針對一個或多個因素(例如,時間、成本……)優化工作流處理。例如,可以按照項目和任務依賴關系來分割任務以使得能夠跨多個處理器和/或計算機并發執行。另外,關于工作流執行狀態的有組織且有意義的消息可例如通過圖形用戶界面(⑶I)傳遞給開發者。在初始工作流執行之后,能夠在對互相依賴的持久存儲的項目(例如,文檔、文件、文字(例如,組件名稱)……)的后續改變中維護這些項目之間的約束,以確保工作流保持一致狀態。根據一種實施方式,項目是否已經改變可以如所需那樣粗糙地或精細地定義, 并且不一定是依賴時間的。一旦檢測到改變,注意力就轉向最小化傳播該改變并返回至一致狀態所需的工作量。能夠再次采用工作流依賴關系來將重新執行限于該工作流中受該改變影響的子集。所公開的其他特征涉及撤消動作以及與常規工作流系統的可互操作性,等寸。現在參考附圖更詳細地描述本發明的各個方面,在全部附圖中用相同的標號來指示相同的或相應的元素。然而應該了解,附圖及其相關詳細描述不旨在將所要求保護的主題限于所公開的具體形式。相反,其意圖是覆蓋落在所要求保護的主題的精神和范圍之內的所有修改、等效和替換的方案。首先參考圖1,示出了工作流系統100。工作流系統100包括工作流引擎110,該工作流引擎110通常用于執行或處理工作流,其中工作流是定義過程或程序的互相關任務和項目集。任務描述要采取的動作(例如,復制、刪除、調用……),并且進一步定義其本身之間的依賴關系、輸入和輸出。項目可以是任務輸入和/或輸出(例如,文件、文檔、特性……)。 例如,任務可消費一個或多個項目作為輸入并任選地產生一個或多個項目作為輸出。或者, 任務可以在不接收一個或多個項目作為輸入的情況下產生一個或多個項目作為輸出。工作流引擎110獲取工作流或其表示以及任何必需項目,執行工作流,并且可任選地產生結果 (例如,一個或多個文檔的集合、文件、可執行代碼……)。工作流系統100能夠在許多不同的上下文中采用,包括但不限于業務/企業過程和計算機軟件開發。出于清楚和明白的目的,所公開的主題的各方面和各實施方式將參考業務/企業過程或計算機軟件開發來描述。當然,所要求保護的主題不旨在由此受限。還應注意,術語可隨上下文變化,而所述概念、特征和/或功能保持不變。例如,在具體參考軟件開發上下文時,術語“構造”可以代替此處的單詞“工作流”。由此,工作流系統100可被稱為構建系統100,工作流引擎110可被稱為構建引擎110,而工作流可被稱為構建。類似地,任務、項目、輸入和輸出等可理解地隨上下文變化,而不按照對所要求保護的主題的范圍或適用的上下文提出限制的任何方式。根據一種實施方式,工作流可通過程序從用通用編程語言(例如,Java 、C# 、 Visual Basic ……)指定的工作流描述(也稱為配置文件/腳本、描述文件、構建文件/腳本/配置)中構造,通用編程語言通常是獨立于域的且圖靈完整的。以此方式,工作流可利用通用編程語言的可表達性,包括特定語言特征或編碼技術,諸如但不限于繼承、參數化和條件等。換言之,通用語言允許容易地描述或定義各種各樣的關系,包括任意復雜的關系。 同樣,通過采用通用編程語言,工作流及其開發者可利用與特定語言相關聯的常規工具,諸如調式器、類型校驗器和代碼優化器,等等。如圖1所描繪的,開發者可指定通用程序120, 該通用程序120描述工作流并且在被執行時構造工作流或其表示(例如,對象圖)。當前,趨勢是使用域專用語言(DSL)或可擴展標記語言(XML)來指定工作流。然而,例如由于其聲明性特性,DSL和XML限制可用于描述工作流的可表達性或計算種類。換言之,DSL和XML當前不具有表達可由通用編程語言(例如,Java 、C# 、Visual Basic ……)表達的所有計算的能力。更正式地,通用編程語言被稱為圖靈完整的,這意味著它們能夠表達圖靈機可計算的任何事物。相反,XML不是圖靈完整的,而雖然DSL可以是圖靈完整的,但DSL常規上是以不是圖靈完整的顯式目標設計的。類似情形是正則表達式和無上下文語法之間的表達能力差異,其中正則表達式能夠描述的比無上下文語法能夠描述的少。這里對于DSL和XML對比通用編程語言亦是如此。例如,如果DSL不實現繼承、功能參數化或條件,則無法用該DSL表達特定事物。因此,存在無法由DSL和XML描述的特定工作流。此外,對繼承、參數化和條件的本機支持以及由特定通用編程語言提供的其他功能由于數十年的演變而被很好地設計,并且通常比可作出以模擬/模仿類似功能的對DSL或XML 的任何擴展好得多地執行。作為示例,考慮貸款批準過程,包括需要由申請人審閱并簽署并由貸款人評估的多個相關文檔。在常規系統中,將需要為每一個特定貸款人生成工作流,因為每一個貸款人的文檔和過程本身可能有差異。然而,更好的方法將會是產生可以為每一個特定貸款人參數化的通用貸款批準過程。換言之,可以指定可以用不同的參數(例如,貸款文檔、條款和條件……)來實例化的工作流。此外,假設申請過程對于美國公民和非公民稍有不同。在這種情況下,可以在工作流中指定條件。此外,可使用繼承來指定各種類型的申請者之間的不同。參數化、條件和繼承全都由諸如C# 或Visual Basic 等面向對象的通用編程語言來本機地支持。雖然可作出向DSL或XML添加類似功能的嘗試,但結果將會是設計糟糕的小型語言。此外,DSL和XML不具有傳統上與通用編程語言相關聯的所有工具,包括類型校驗器、調式器以及代碼優化器等等。作為示例,如果使用強類型通用編程語言來構造工作流, 則可對該工作流進行類型校驗以減少編碼差錯。例如,源代碼可具有類型“Source(源)” 而匯編件可具有類型“Assembly (匯編件)”,并且如果試圖將匯編件作為源文件來傳遞,則類型校驗器可以例如在編譯時指示這是錯誤的。另外,可以采用調式器來測試和調試工作流,并且使用代碼優化器來優化工作流的規約。此外,利用通用編程語言來構造工作流使得能夠對工作流進行元編程,其中元編程指的是相對于僅僅能夠執行工作流,觀察、推理、交互、操縱和/或生成工作流的能力。例如,假設表示人類飛行員在飛行時執行的工作的工作流。此外,假設實施飛行員不能工作超過十個小時,之后需要由新飛行員來代替的限制。可以編寫分析工作流并確定該工作流是否能夠在十小時內完成并決定是否需要兩個飛行員的程序。類似地,可以分析工作流以確定其是否能被分割并且在多個處理器和/或機器上運行。另外地或另選地,可以分析工作流以確定是否能夠通過交換任務或以不同次序執行任務來優化執行。此外,工作流可被輸入到其他工作流中,或者換言之,工作流可以是可自適用的, 以使得能夠產生推理、改變、生成和/或更新其他工作流的工作流。作為示例,假設如果開發者產生代碼,則要求該開發者對該代碼進行數字簽名。如果存在未簽署代碼的第一工作流,則可采用變換該第一工作流以使其確實簽署代碼的第二工作流。通用程序可構造互相關節點圖。圖2提供了節點實例和關系的圖形表示以幫助對其進行進一步討論。節點210可包括輸入和輸出的列表以及在不同的圖構造之間一致且穩定的唯一標識符(ID)。唯一標識符可依賴于圖中的上游節點(它依靠的事物)以便允許即使在工作流本身改變時也部分地執行工作流,如將在下文中進一步描述的。每一個節點 210可以是項目220或者任務230。項目220可描述任務需要運行的信息。例如,項目可以是作為元數據傳遞給任務的文件或特性(例如,用于配置工作流的鍵/值對)。在得到支持的情況下,項目可以是強類型的,以減少編碼差錯幾率。作為示例,編譯程序的特性可以告訴編譯程序是產生庫還是產生可執行代碼(exe) :“ftx)perty<TargetType>”,其中“TargetType(目標類型)”被定義為“public enumTargetType {Library, Exe}”。由此,在編譯構建圖的程序時,編譯程序可強制實施對該特性的有效輸入。對于文件亦如此。例如,編譯程序可采取“Assembly(匯編件)”類型,該類型從如“Reference (引用),,自變量的類型“File (文件)”導出,以便強制實施只為該特性傳遞匯編件(例如,可執行代碼(exe)、動態鏈接庫(dll)……)。雖然項目 220可由一個或多個任務消費,但項目220還可由任務230在執行時產生。任務230描述要采取的動作以及對于該動作的雙撤消動作。任務230可具有指示或參數化動作的輸入項目集220。例如,編譯任務可具有輸入,諸如源文件列表、匯編件名稱、匯編件引用和目標類型,等等。任務230還可具有由動作產生的輸出項目。例如,編譯程序可產生匯編件作為輸出。由任務230描述的動作和和撤消動作可被表示為被示為動作250和撤消260的命令240。作為示例,對編譯程序的外殼執行命令調用可基于諸如“csc. exe/r: system, dll/ t: library foo. csc/out:foo. dll”等輸入項目來被表示為具有一組自變量的命令動作 250,其中“csc. exe”調用編譯程序,“system, dll”和“foo. csc”表示輸入,而“foo. dll”是輸出。盡管可定制,但任務的默認撤消命令260是標識并移除輸出文件。因此,在以上示例中,撤消命令260將刪除“foo. dl 1 ”。在一種實施方式中,任務230還負責注冊其自身、輸入和輸出之間的依賴關系。命令240包括用于執行動作的所有信息。一旦構造,命令240就可以是自包含的 (但它能夠知道創建它的任務的唯一 ID)且可串行化的,以使得命令240能夠被傳送至不同的機器并由該不同的機器執行。換言之,命令可被表示為數據,從第一計算機串行化、發送到第二計算機,由第二計算機來去串行化并執行。此外,命令可以是自包含的且可串行化的,以允許撤消命令被存儲在文件中并且用于撤消與不再作為工作流的一部分存在的任務相關聯的動作。命令240還可具有指示命令240的成功或失敗的執行方法以及自動將每一個記錄的消息與擁有該命令的任務相關聯的特定記錄器,如將在下文中進一步描述的。命令的一個示例是“aiellExecuteCommancK外殼執行命令)”,該命令取得用于運行或執行的可執行代碼、一組自變量和退出代碼(例如,成功執行、失敗)并且在執行時將使用操作系統應用程序編程接口(API)來執行外部命令,以便向記錄器提供消息,并基于該命令的退出代碼來返回成功或失敗。最終,節點集210可被稱為目標270。這一目標270可被傳遞至工作流引擎并用于發現并執行要完成的工作。以下是可利用諸如C# 等通用編程語言來生成并在執行時構造工作流的示例性通用程序
權利要求
1.一種工作流系統(100、800),包括耦合到存儲器(1630)的處理器(1620),所述處理器(1620)被配置成執行以下存儲在所述存儲器(1630)中的計算機可執行組件第一組件(112),所述第一組件被配置成接收包括節點集的工作流,所述節點集表示一個或多個任務以及一個或多個項目并且顯式地表達所有任務和項目依賴關系;以及第二組件(113),所述第二組件被配置成按照所述任務和項目依賴關系來確定所述工作流的獨立子集并啟動所述獨立子集的執行。
2.如權利要求1所述的系統,其特征在于,所述第二組件被配置成同時啟動所述工作流的兩個或更多獨立子集的執行。
3.如權利要求1所述的系統,其特征在于,所述第二組件被配置成確定所述獨立子集包括已改變項目以及依賴于所述已改變項目的一個或多個任務和/或項目。
4.如權利要求3所述的系統,其特征在于,還包括被配置成按照先前狀態和改變定義來檢測項目改變的第三組件。
5.如權利要求4所述的系統,其特征在于,所述改變定義是不依賴時間的。
6.如權利要求4所述的系統,其特征在于,所述改變定義對于相關任務的項目改變。
7.如權利要求1所述的系統,其特征在于,還包括被配置成用描述消息類型的信息來記錄關于工作流執行的消息的第三組件。
8.如權利要求1所述的系統,其特征在于,所述工作流從用通用編程語言指定的工作流的描述中產生。
9.如權利要求1所述的系統,其特征在于,所述項目中的至少一個是工作流。
10.一種工作流方法,包括采用至少一個處理器(1620),所述至少一個處理器被配置成執行存儲在存儲器 (1630)中的計算機可執行指令以執行以下動作接收用通用編程語言描述工作流的程序;以及執行所述程序以產生包括一個或多個任務和項目的集合的工作流的表示。
11.如權利要求10所述的方法,其特征在于,還包括通過程序對所述工作流的表示的觀察、推理、或修改中的一個。
12.如權利要求10所述的方法,其特征在于,對描述所述工作流的程序發起與所述通用編程語言相關聯的調試器、類型校驗器或代碼優化器工具中的至少一個的執行。
13.如權利要求10所述的方法,其特征在于,還包括向工作流引擎提供所述工作流的表示,所述工作流引擎被配置成利用由所述工作流的表示表達的人物和項目依賴關系來啟動所述工作流的獨立子集的執行。
全文摘要
本發明“允許元編程的最優增量工作流執行”描述并且隨后由通用程序來構造工作流。特別地,這一構造使得能夠采用元編程。此外,工作流項目和任務依賴關系能夠在該工作流中顯式表達并且用來特別地針對一個或多個因素優化工作流執行。例如,依存關系信息可用來調度任務的并發執行以及在工作流或項目改變時將重新執行限于由該改變影響的任務。另外,可以類型化涉及工作流處理的消息以便于以結構化且容易理解的方式記錄。
文檔編號G06Q10/00GK102193823SQ201110068588
公開日2011年9月21日 申請日期2011年3月14日 優先權日2010年3月12日
發明者D·v·威爾茲恩, H·J·M·梅杰, J·V·格格 申請人:微軟公司