日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

InfoPath + Workflow + MOSS

發布時間:2024/1/1 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 InfoPath + Workflow + MOSS 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MOSS 2007種利用InfoPath 2007結合Workflow Foundation可以高效的做出非常強大的工作流應用。因為在SDK中這部分的內容有點不流暢,讀起來比較費勁。所以我想以我的一點小經驗和大家Share下,希望能少走點彎路,然后再結合SDK 、ECM Starter KitsWSS Workflow StarterKits 快速掌握這個非常棒的功能。

1、我要創建用于 MOSS 的 Workflow 項目。

???? 請下載 WSS Workflow StarterKits,安裝后將有個"SharePoint Server"的組,內有 SharePoint Sequential Workflow Library 和 SharePoint State Machine Workflow Library 兩個項目模板。利用這兩個模板創建的項目,對 Workflow 的開發、部署都很方便。

  • 項目用到的 Microsoft.Office.Workflow.Tasks.dll、Microsoft.SharePoint.dll 和 Microsoft.SharePoint.WorkflowActions.dll均在裝有MOSS 2007的機器的 C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\ISAPI\ 目錄下。其中開發時主要注意記得在VS2005工具箱里注冊 microsoft.sharepoint.WorkflowActions.dll,就可以從工具箱里拖拉出MOSS 特有的 Workflow 控件了。
  • Feature.xml:在 MOSS 中, Workflow 是作為 MOSS 的 Feature 存在的,具體使用時再關聯到具體某個 List 或 Library 中并創建實例運作的。因為 Feature.xml 文件就是安裝部署時候要把生成的項目 dll 文件作為 Feature 注冊到MOSS 中的描述文件了。剛打開時是空的,只是一些提示,按提示插入 Feature 的 Snippets,就有一段 xml 代碼插入。其中 GUID 可通過 VS2005 菜單 Tools 下的 Create GUID 創建一個新的 GUID 填入;中間有個 <ElementManifest Location="workflow.xml" /> 節點用于關聯工作流 xml 描述文件。
  • Workflow.xml:工作流描述文件。其中有工作流名字Name(該名字在添加 Workflow 關聯具體列表或文檔庫時顯示在工作流列表中);GUID(同樣通過 Create GUID 生成填入);CodeBesideClass和CodeBesideAssembly對應工作流類全名和程序集全稱(項目如進行簽名,此處需明確PublickToken,同時把 install.bat 中 gacutil 部分反注釋掉);TaskListContentTypeId為工作流使用到的任務列表的 ContentType ID,默認為 Workflow Tasks 的 ContentTypeID,一般不需要修改;AssociationUrl、InstantiationUrl和ModificationUrl一般也不用改,默認創建即是用于呈現InfoPath 的頁面,其中 AssociationUrl 為用來關聯 Workflow 和列表或文檔庫,并設置工作流運行參數的頁面;InstantiationUrl為用于當手動啟用工作流時呈現給用戶的初始化頁面。Association_FormURN 和 Instantiation_FormURN 等以 _FormURN 結尾的節點都存放其相應的InfoPath Form 的 ID(該 ID 可通過設計InfoPath Form時,打開“文件->屬性”窗口即可看到該InfoPath Form 的 ID)。關于 TaskForm 下面解釋。
  • install.bat:用于安裝部署Workflow的批處理文件。根據具體情況注釋或反注釋命令行,同時配置MOSS地址即可。
  • Workflow1.cs:工作流設計和代碼。

2、我的 InfoPath 表單模版無法正常發布,或者發布后狀態為“Installing”而不是“Ready”。

??? 請檢查以下幾個環節,一般無法正常發布都有可能是以下原因造成。

  • 首先檢查表單模版是否與瀏覽器兼容。設計表單模版狀態下,打開 InfoPath 菜單“工具-->檢查設計方案”,然后再在右邊任務窗格中點“更改兼容性設置”彈出表單選項,把“瀏覽器兼容性”組里的“設計一個可在瀏覽器或InfoPath 中打開的表單模版”勾起來,然后進行檢查。
  • 如果表單發布用于 Web Access,可同樣打開“表單選項”,在“安全和信任”中把“安全級別”調整為“域”級別。
  • 確認所有的表單最好都不曾發布過。判斷依據,把.xsn表單模版文件拷貝到其他地方,打開右鍵“設計”打開它,如果出現警告錯誤框提示“此表單已經發布到一個位置,但后來被保存或移動到了另外一個位置。如果確?;诖四0宓谋韱握9ぷ?#xff0c;請重新發布表單”,那就說明該表單已經發布過,否則則沒發布過。沒發布過的表單模板,每次保存表單模板時均提示是“發布”還是“保存”,一概“保存”。
  • 如果該 InfoPath 表單有后部 C#或VB.NET代碼,即不小心用 VSTA 打開過,那么發布時會要求必須經過管理員審核,也會造成無法正常發布表單??稍凇氨韱芜x項”窗口中“編程”里,點擊“刪除代碼”即可。
  • InfoPath 2007是中文版本,但發布到英文版本的MOSS 中時也會出現發布異常。同樣在“表單選項”窗口中“瀏覽器”里,選擇表單語言為“英語(美國)”即可。
  • 3、我在 MOSS 列表中設置 Workflow 為新增一條記錄 A 時就自動啟動,同時給審批者創建一條任務,該任務用了我自己定義的任務InfoPath 表單,但該 InfoPath 任務表單中有幾個字段是要讀取記錄A中字段值來顯示的。

    ??? 這個問題的實質就是要把某條具體 ListItem 中的字段值傳遞給 Task 表單(該表單為 InfoPath 表單),然后再通過Task表單顯示出來。這里頭有三個子問題:怎樣獲取和當前Workflow相關的 ListItem、通過怎樣方式把值傳遞給 Task表單、Task 表單最后又怎么呈現。

  • 怎樣獲取和當前Workflow相關的ListItem:通過SPWorkflowActivationProperties.Item來獲取當前 SPListItem。
  • 通過怎樣方式傳遞給 Task 表單。請查看《How to:Access Workflow Task form Data》。例如 taskProperties.ExtendedProperties["ApplyNo"] = this.ApplyNo;。
  • Task表單最后怎么呈現。察看《Creating the WOrkflow Task Edit Form》的第4、5、6點。主要是要選擇綁定 ows_ 字段時,默認是沒有 ows_ 字段的“主”數據源,你必須選擇“ItemMetadata (輔助)”數據源才能看到ows_字段。
  • ??? 具體范例可以查看 ECMStarterKits中 HelloWorld 經典示例。結合上面注意的幾點。

    4、我現在已經在 Workflow.xml 里配置了一個 Task Form了(有類似這么一個節點<Task0_FormURN>urn:schemas-microsoft-com:office:infopath:ReviewTaskForm:-myXSD-2005-11-22T23-52-35</Task0_FormURN>),這個 Task Form是我第一個 Task 用到的,但我還有第二步,第三步,每個步驟都會建一個任務,我的每個任務都要對應不同的 Task Form 來收集每個階段的用戶錄入的數據來運作工作流的。怎么加第二個任務表單?

    ??? 根據 SDK 《Windows Task Form〉,無疑,增加第二個Task Form的第一步就是在把設計好的第2步用到的InfoPath 表單模板的 ID(URN) 配置起來。即在<Task0_FormURN>節點下增加類似這么一個節點:<Task1_FormURN>urn:schemas-microsoft-com:office:infopath:MultiStage-Initiation:-myXSD-2006-04-28T22-44-03</Task1_FormURN>。

    ??? 真正核心的問題來了,怎么讓第2個任務表單<Task1_FormURN>和實際工作流中分配的第2條任務關聯起來?好,關鍵就在 SPWorkflowTaskProperties.TaskType 這個屬性。TaskType = 0 時就表示這是第一個任務請用第一個任務表單,TaskType=1時就表示這是第二個任務請用第二個任務表單。就是這么簡單。:)

    ??? 你可以打開 ECM StarterKits中的 MultiStage 示例,這個示例是比較實用的例子,務必研讀。打開示例中的 WorkflowTask.cs,找個GetTaskCreationProperties()方法。修改如下:

    public SPWorkflowTaskProperties GetTaskCreationProperties(int taskType)
    {
    ??? SPWorkflowTaskProperties properties = new SPWorkflowTaskProperties();
    ??? properties.AssignedTo = this.Participants[0].AccountId;
    ??? properties.Title = this.TaskTitle;
    ??? properties.Description = this.TaskInstructions;
    ??? properties.SendEmailNotification = true;
    ??? properties.TaskType = taskType;
    ??? properties.DueDate = (DateTime)this.dueDate;

    ??? return properties;
    }

    ??? 然后再打開 Workflow1.cs 代碼,搜索到這么一行代碼 activity.TaskCreationProperties = this.activeTask.GetTaskCreationProperties(); 改為:

    activity.TaskCreationProperties = this.activeTask.GetTaskCreationProperties(this.completedStages);

    ??? 至此,這個 MultiStage 例子就更智能化了。你在增加工作流步驟外,還可以方便控制每個步驟任務用到的 InfoPath 表單了,而不是都用同一個表單。

    5、先到這里吧。最后推薦幾篇經典文章:

    總結

    以上是生活随笔為你收集整理的InfoPath + Workflow + MOSS的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。