利甚可胜なツヌルを䜿甚しお、SharePointのビゞネスプロセスを自動化する

はじめに


こんにちは

Sharepoint 2010プラットフォヌムでの単䞀のビゞネスプロセスの自動化の経隓を共有したいず思いたす。

この蚘事は䞻に、䜕らかの理由でVisual Studioでコヌドを曞きたくないナヌザヌに興味があるず思いたす。 さたざたな即興゜リュヌションを䜿甚しお、暙準のSharePoint機胜の制限を回避する方法に぀いおです。



䌚瀟でのさたざたなプロセスの自動化の経隓から、かなり䌌通ったビゞネスプロセスを特定するこずができたした。もちろん、同様の分類がある堎合は、名前があるかもしれたせん。 これは、詳现が異なるさたざたな掟生物を持぀こずができる基本的なプロセスです。たずえば





このようなすべおのシステムのメカニズムはほが同じです。䞀般的なケヌスでは、圚庫、アむデア、泚文、問題などの䞻芁な゚ンティティを保存するリストが必芁です。 次に-泚文を圢成するためのタスクのリストが必芁です。 さらに、ステヌタス、ロヌル、リヌゞョン、ブランチなど、䞀定数の参照リストがおそらく必芁になりたす。

プラットフォヌムには、これに必芁なすべおのものがありたす。基本デヌタ、割り圓おられたタスクずディレクトリのリストをすばやく䜜成する機胜、ADず既に同期しおいるナヌザヌ、既補のアクセス分散メカニズムなどです。 ただし、プロセスを完党に自動化し、タスクの割り圓おを割り圓お、回答を凊理し、゚ンティティをステヌタスからステヌタスに倉換するタスクを持぀コヌディネヌタヌを䞍芁にするには、少なくずもワヌクフロヌを䜿甚する必芁がありたす。 それらから始めたしょう。



問題の声明


ビゞネスプロセスの特殊なケヌスを怜蚎したす。これを「芏制手続きの泚文」ず呌びたす

芁するに、既補の䞀般的に受け入れられおいる芏制手順のリストがありたす-芏制。 このプロシヌゞャのリストの芁玠を盎接䜜成、倉曎、たたは削陀するアクセス暩はありたせんが、どのナヌザヌもプロシヌゞャの䜜成、倉曎、たたは削陀を提案できたす。

これを実珟するために、圌はいわゆるオヌダヌを䜜成したす。 泚文は特定の䞀連のステヌタスステップを通過し、各ステップで特定のロヌルに割り圓おが割り圓おられたす。 泚文をクロヌズする決定は、泚文がどのステヌタスになるかによっお異なりたす。 さらに、ステップの順序は、䜜成、倉曎、削陀の順序ごずに異なり、゚クスプレスの远加の笊号にも䟝存したす。これにより、簡単な方法で順序を確認できたす。 したがっお、各ステップで泚文が進む堎所は、そのタむプ、゚クスプレスサむンの存圚、およびナヌザヌの決定の3぀の条件に䟝存したす。

泚文が承認ず远加のチェヌンを通過するず、察応する芏制が自動的に䜜成/倉曎/削陀されたす。



䞀般的な゜リュヌションアヌキテクチャ


問題を解決するために䜜成されたメむンリスト







プロセス図



Capture



プロセス自動化


以䞋のスクリヌンショットでは、Visioを䜿甚しお䜜成された同様のスキヌム

Capture1



MS SharePoint Designerに゚クスポヌトできたす。「if ... then ...」ずいう条件ずナヌザヌのタスクを䜿甚しおワヌクフロヌが自動的に䜜成されたすが、この単玔化されたスキヌムでも非垞に面倒です。 特に、泚文のほがすべおのステップで远加のアクティビティを実行する必芁があるこずを考慮した堎合-たずえば、メヌルを送信し、いく぀かのステップで他のリストを倉曎する必芁がある堎合。 これにより、線圢ワヌクフロヌおよびSP Designerでは線圢のみを行うこずができたすを状況に適甚するこずが困難になりたす。



この問題を解決するには、この2぀のワヌクプロセスの組み合わせを䜿甚したす。これを「リング」ず呌びたしょう。



Capture2



ワヌクフロヌ「リング」は、リニアワヌクフロヌを正垞に眮き換えたす。

アむデアは簡単です-すでに2぀のリスト、泚文のリスト、タスクのリストがありたす。 単玔なワヌクフロヌを泚文のリストに添付したす。これは泚文の珟圚のステヌタスを確認し、これに応じお、このタスクたたはそのタスクを䜜成したす。 さらに耇雑でないワヌクフロヌをタスクのリストに添付したす。これにより、タスクが完了するず、リンクされた泚文のステヌタスが曎新され、泚文のワヌクフロヌの再実行が開始されたす。



すべおのステップずトランゞションをワヌクフロヌの本文で盎接説明しないために、さらにいく぀かの参照リストを䜜成したす。







これらのリストは、プロセスを自動化するのに十分です。 もちろん、taskfromフィヌルドを空のたたにした堎合、これはタスクが最初で前のタスクがないこずを意味したす。 空のtasktoフィヌルドは、次のステップタスクが存圚しないこずを意味したす。メヌルを送信する以倖のこずを行う必芁がある堎合、この状況はワヌクフロヌの本文でさらに凊理する必芁がありたす。



泚文リストの最終的なワヌクフロヌは十分に短いです-自分で刀断しおください写真は半分に分割されおいたす



Capture3_1 Capture3_2



タスクリストのワヌクフロヌに含たれるアクティビティは1぀だけです



Capture4



もう1぀埮劙な違いがありたす。 ワヌクフロヌでは、いく぀かのフィヌルドが䞀臎するだけでリストからアむテムを取埗しお遞択するこずはできたせん。 䞀臎するフィヌルドは1぀だけにしおください。 ただし、問題ぱレガントな方法で解決されたす。 小さなワヌクフロヌやハンドラヌ、たたはロゞックのトランゞションのリストにある蚈算フィヌルドだけをハングアップする必芁がありたす。そのタスクは、比范に䜿甚する非衚瀺のテキストフィヌルドに入力するだけです。 したがっお、たずえば、ステップが状態「タスク名」、゜リュヌション「はい/いいえ」、「サむン゚クスプレス」および「泚文の皮類」に䟝存する堎合、それに応じお、ラむンは「マネヌゞャヌ-はい-はい-泚文䜜成の承認」のようになりたす。 メむンワヌクフロヌには条件文字列倉数があり、これをフィヌルドず比范し始めたす。





この゜リュヌションの利点

+䞀床空癜ノヌドを䜜成すれば十分であり、将来特定のビゞネスプロセスを自動化するために䜜業ノヌドに倉曎するにはかなりの時間がかかりたす

+泚文の軌跡を倉曎するのは非垞に簡単です。ワヌクフロヌ自䜓を倉曎する必芁はなく、タスクリストず遷移のロゞックの参照倀を倉曎するだけです。

+埮調敎の条件により、ナヌザヌが任意のステップにゞャンプしたり、個々の軌道を個々のオヌダヌに割り圓おたりする可胜性を実珟できたす。

短所

-泚文が珟圚配眮されおいる矎しい図を芋るこずはできたせん。暙準の線圢ワヌクフロヌを䜿甚する堎合、これをどのように行うこずができたすか

この欠点を少なくずも郚分的に盞殺するために、すべおの関連タスクを泚文するためのフォヌムであるDispFormで衚瀺できたす。 これにより、泚文が珟圚どのステップにあり、どのナヌザヌからデヌタが期埅されおいるかを明確に把握できたす。 これは単玔に行われたす。タスクを順序に関連付ける必芁がありたす-珟圚の芁玠のID倀を[順序]フィヌルドに割り圓おるだけで十分です。 たた、泚文衚瀺フォヌムでそれらを簡単に衚瀺できたす。Webパヌツを「泚文」リストに远加するだけです。これは、眮換フィヌルドの倀を持぀タスクリストの芁玠を衚瀺するフィルタヌを備えた衚瀺パヌツです。IDは、ブラりザヌク゚リ文字列から取埗したパラメヌタヌ



関連リストアむテムの䜜成芏則にリンクされた順序。 フィヌルドのオヌトコンプリヌトず非衚瀺。


䜜業指瀺曞からわかるように、芏則を倉曎および削陀するための泚文を䜜成できる必芁がありたす。 このため、明らかに、泚文は芏則に結び付けられなければなりたせん。

システムの顧客の垌望は、これらの新しく䜜成された泚文のフィヌルドのオヌトコンプリヌトでした-芏制からのフィヌルドは泚文に転送されるべきでした。

詊行され、テストされた方法の1぀は、ワヌクフロヌによっお完成したOrderを䜜成し、結果のOrderぞのリンクをナヌザヌに送信するこずでした。 ただし、この方法は非効率性を瀺しおいたす。ナヌザヌはメヌルに気を取られたくないため、䜜成されたOrderを画面䞊で確認し、䜜成前に倉曎を加える可胜性がありたす。

このような解決策が考案されたした。 すべお同じSharePoint Designerを䜿甚したす。 芏制リストの芁玠を衚瀺するための新しいフォヌムが䜜成されたす。既存のDispForm.aspxファむルを耇補しお䜜成するこずが望たしいです

次に、すべおのフィヌルドを衚瀺するフォヌムの䞋に、泚文リストの新しい芁玠を䜜成するためのフォヌムを䜜成したす。 したがっお、1぀のフォヌムがあり、その䞊郚には衚瀺モヌドのフィヌルドがあり、䞋郚には入力モヌドのフィヌルドがありたす。

蚘入するには、叀き良きjavascriptを䜿甚したす。 スクリプトコヌドは、* .aspxペヌゞの次の行に配眮できたす。

<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">
      
      





たたは、他のすべおのWebパヌツの䞋にある新しいコンテンツ゚ディタヌWebパヌツで。

ステップ1トップWebパヌツのフィヌルドから倀を取埗したす。 ニュアンスは、これらのフィヌルドのIDが同じであるこずです。 そのため、たずえば、「1行テキスト」タむプのフィヌルドがいく぀かある堎合、すべおのフィヌルドのIDは「SPFieldText」になりたす。これにより、圓然、目的の倀を芋぀けるこずが難しくなりたす。

  //    TD var inputTags = document.getElementsByTagName('TD'); //        al = new Array(); nm = new Array(); lp = new Array(); bl = new Array(); ch = new Array(); //   for(var i=0;i<inputTags.length;i++) if(inputTags[i].id == 'SPFieldNumber') al.push(inputTags[i]); else if(inputTags[i].id == 'SPFieldText') nm.push(inputTags[i]); else if(inputTags[i].id == 'SPFieldLookup') lp.push(inputTags[i]); else if(inputTags[i].id == 'SPFieldBoolean') bl.push(inputTags[i]); else if(inputTags[i].id == 'SPFieldChoice') ch.push(inputTags[i]);
      
      





これで、配列芁玠にal [0]-id "SPFieldNumber"を持぀最初のタグのコンテンツ、al [1]-2番目などがありたす。

ステップ2取埗した倀を適切なフィヌルドに曞き蟌みたす。 線集フォヌムでは、衚瀺フォヌムずは異なり、すべおのフィヌルドには䞀意のIDがありたすちなみに、IEでF12をクリックし、カヌ゜ルで目的のフィヌルドを遞択しお怜玢できたす。

Capture5

フィヌルドのタむプごずに独自のアプロヌチが必芁です。たずえば、「1行テキスト」タむプず「遞択」タむプのフィヌルドの堎合、タグの内容は次のようになりたす。

 <td valign="top" class="ms-formbody" width="450px" id="SPFieldText"> <!-- FieldName="" FieldInternalName="Title" FieldType="SPFieldText" -->   </td>
      
      





タグの内容からの倀は次のように取埗できたす。

 //     nm0=nm[0].innerHTML; //      ,        end_comment = '-->'; //    end_pos = nm0.indexOf( end_comment ); nm0=nm0.substr( end_pos + end_comment.length ); nm0 = nm0.replace(" ",""); //     document.getElementById("ctl00_m_g_41362970_e9f4_429e_b60f_f62d1e52e332_ff11_new_ctl00_ctl00_TextField").value = nm0
      
      





タむプが「眮換」のフィヌルドの堎合、タグの内容は次のようになりたす

 <td valign="top" class="ms-formbody" width="450px" id="SPFieldLookup"> <!-- FieldName="" FieldInternalName="_x0418__x043d__x0441__x0442__x04" FieldType="SPFieldLookup" --> <a href="/it/d/dpp/nmc/Lists/InstanceForis/DispForm.aspx?ID=6&RootFolder=*"> ​</a> </td>
      
      







ID倀のみが必芁です。次のような正芏衚珟を䜿甚しお取埗できたす。

 lp0 = lp[0].innerHTML; var r = /ID=(\d+)/ig if ( r.test( lp0 ) ) { res = lp0.match( r ) lp0 = RegExp.$1 }
      
      





ここで、「Substitution」フィヌルドを目的の倀に蚭定する必芁がありたす-これはかなり膚倧なコヌドであり、いく぀かの機胜がここから取埗されたす http : //blogs.msdn.com/b/sharepointdesigner/archive/2007/06/13/using-javascript- to-manipulate-a-list-form-field.aspx

これらの関数は、倉曎なしでそのたたペヌゞにコピヌされたす。 その埌、「眮換」フィヌルドに倀を蚭定するには、たずえば次のように蚘述したす。

 setLookupFromFieldName("  ", lp0); //    lp0
      
      





たたは

 setLookupFromFieldName(" ", vals["ID"]); //  ,     
      
      





したがっお、圓瀟の泚文は芏則に結び付けられたす。

䞀郚のフィヌルドは、目的の倀に明瀺的に蚭定する必芁がある堎合がありたす。 たずえば、「はい/いいえ」フィヌルドの堎合

 document.getElementById("ctl00_m_g_41362970_e9f4_429e_b60f_f62d1e52e332_ff3_new_ctl00_ctl00_BooleanField").checked=false;
      
      





さらに、ナヌザヌの倉曎を避けるために、䞀郚のフィヌルドを非衚瀺にする必芁がありたす。 私たちの堎合、これらは「関連芏制」フィヌルドず「泚文タむプ」フィヌルドです。

フィヌルドを非衚瀺にするために、jQueryラむブラリに優れた゜リュヌションがありたす。 これらのラむブラリを接続するだけで、次のようにラむブラリぞのパスが瀺されたす。

 <script language="javascript" type="text/javascript" src="/jQuery%20Libraries/jquery-1.6.1.min.js"></script>
      
      







そしお今、ナヌザヌから行を隠すために、この構築は十分です

 $('#ctl00_m_g_41362970_e9f4_429e_b60f_f62d1e52e332_ff24_new_ctl00_Lookup').closest('tr').hide();
      
      





ここでSPServicesSharepoint専甚に蚘述されたjQueryベヌスのラむブラリに蚀及しないのは間違っおいたす。 このプロゞェクトでは圹に立ちたせんでしたが、倚くの䟿利な機胜がありたす。 たずえば、$。SPServices.SPCascadeDropdowns-前のフィヌルドでの遞択や他の倚くの有甚性に応じお、「眮換」フィヌルドの発信倀をフィルタリングできたす。 プロゞェクトのアドレス http : //spservices.codeplex.com



入力したフィヌルドの怜蚌


SharePointには、必須/オプションフィヌルドの兆候があり、入力倀を怜蚌するための匏を指定する機胜がありたす。

フィヌルドをチェックするための通垞のメカニズムでは䞍十分な堎合がありたす。 たずえば、入力倀を他の倀に䟝存させる堎合。

フィヌルド怜蚌を実装するには、ここから取られたSharePoint Power EventReceiver 2010゜リュヌションの機胜を䜿甚できたす。http//ilovesharepoint.codeplex.com/releases/view/55733

むンストヌルされた゜リュヌションは、リストパラメヌタヌに2぀の远加メニュヌ項目を远加したす。

Capture6

たた、任意のむベントハンドラヌのPowerShellコヌドを蚘述できたす。 入力した倀の正確さを確認する必芁がある堎合、ItemAddingおよびItemUpdating関数を定矩する必芁がありたす。

これを行うには、コメントを倖しお次のようなコヌドを蚘述したす。

 function ItemUpdating{ if( $properties.AfterProperties["_x0413__x0440__x0443__x043f__x04"] -eq 0 ) { $atmsg="  ; " $warcnt=$warcnt+1 } if(($properties.AfterProperties["xpress"] -eq "true") -and ($warcnt)) { $properties.ErrorMessage = "<b>    :</b><br>$atmsg<br>        )" $properties.Cancel = $true } }
      
      





陰湿なBefore-およびAfterPropertiesに泚意しおください。詳现に぀いおは、gandjustas.blogspot.com / 2011/05 / blog-post.htmlをご芧ください。



タスクを閉じるためのアクセスを制限し、期限切れのタスクに関するアラヌトを出したす。


最初は、新しく䜜成したタスクリストで、タスクを1人だけに割り圓おるこずができたす-ただし、これは「割り圓おられる」フィヌルドの「耇数の倀を消去できる」プロパティを倉曎するだけで簡単に倉曎できたす

別のポむントは解決がより困難です-盎接割り圓おられたナヌザヌのみにタスクを倉曎できるようにする方法は SharePoint Designerには、「リストアむテムぞのアクセス蚱可を䞎える」アクティビティがありたす。これは、ワヌクフロヌの䜜成者に代わっおすべおのアクティビティが実行される、いわゆる「停装ステップ」で䜿甚できたす。 ただし、このアクティビティは、耇数のナヌザヌがいるフィヌルドでは機胜したせん。1人だけで機胜したす。

ここでは、Power EventReceiver 2010の䜜成者による別の゜リュヌションを䜿甚できたす。これは、 http //ilovesharepoint.codeplex.com/wikipagetitle = Workflow20Actions20for20SharePoint20Designer202010referringTitleにあるSharePoint Designer 2010の高床なワヌクフロヌアクションず呌ばれたす。 =ドキュメント 。ワヌクフロヌで远加のアクティビティを実行できたす。 PowerShellスクリプトの実行のアクティビティに興味がありたす。これを䜿甚しお、[割り圓お先]フィヌルドの内容をコンポヌネントに分割し、個々のナヌザヌに分割したす。

ワヌクフロヌのアクティビティは次のずおりです新しいタスクの䜜成時に実行。

Capture7

そしお、ここに圌女のコヌドがありたす。powershellのおかげで非垞に簡単です。

Capture8

この゜リュヌションの制限が最倧5ナヌザヌであるこずは明らかです。 通垞、これで十分です。

最埌に、タスクの期限切れに関するナヌザヌぞの通知を線成する方法たたはこの期限が近づいおいる、たたはタスクが2日前に期限切れになっおいる、たたはすべおに぀いお-「䞀時停止たで」アクティビティで別のワヌクフロヌが必芁です。期日を埅っおアラヌトを送信したす。



目的のペヌゞにリダむレクトしたす


時々、「保存」ボタンをクリックしおナヌザヌをペヌゞにリダむレクトする必芁がありたす。

これが垞に同じリンクである堎合は、暙準ボタンを削陀しお、次のようなコヌドで独自のボタンを䜜成したす。

 <input type="button" value="" name="btnFormAction" onclick="javascript: {ddwrt:GenFireServerEvent('__commit;__redirect={../orderz/myorders.aspx}')}" />
      
      





リダむレクトの方向が遞択したフィヌルドに䟝存する堎合、同じPower EventReceiver 2010が圹立ちたす。コヌドは次のようになりたす。

 function ItemAdding{ if ($properties.AfterProperties["reqtype"] -eq " ") { $properties.Status = [Microsoft.SharePoint.SPEventReceiverStatus]::CancelWithRedirectUrl $properties.RedirectUrl = "../orderz/NewForm.aspx" } else { $properties.Status = [Microsoft.SharePoint.SPEventReceiverStatus]::CancelWithRedirectUrl $properties.RedirectUrl = "../regproc" } }
      
      







アクセス蚱可を制限せずに䜜成/倉曎するアクセスを制限する


ナヌザヌはルヌルリストのアむテムを䜜成、倉曎、たたは削陀するこずを犁じられおいたすが、これらのアクションを実行する暩限を奪われた堎合、ワヌクフロヌはこれらの操䜜を実行できたせんもちろん、これらのステップは停装ステップで実行されたすが、この堎合は䜜成者が䜜成者になりたすが、垞に䟿利ずいうわけではありたせん

1぀の゜リュヌション-埓来のNewForm、EditFormの代わりにリストの新しいフォヌムを䜜成し、新しいフォヌムを䜜成し、それらの「デフォルト」ボックスをチェックし、そこからすべおのフィヌルドを削陀しお、ナヌザヌに䜜成/削陀の理由を説明するテキストに眮き換えたす芏制を盎接行うこずはできず、代わりに䜕をする必芁があるか-リンクず指瀺が必芁です。



おわりに


もちろん、プロゞェクトの最終的な完成のために、顧客はさらにいく぀かの「研磚」アクションを必芁ずしたす-䞀郚のフィヌルドを非衚瀺にし、プロセスの圹割に応じおビュヌずメニュヌをカスタマむズするナヌザヌワヌクステヌションを䜜成したす。 しかし、私は䞻芁な「トリック」を蚘事にリストしたした。それらが誰かに圹立぀こずを本圓に願っおいたす。



All Articles