BOSS-Kadrovikと統合されたSharePoint 2013の休暇申請管理サービス

6か月前に、地理的に分散したオフィスと数千人のスタッフを持つ大規模な顧客の会議室を予約するためのサービスを実装する方法について話しました。 私たちは引き続きこの会社のSharePointポータルと連携し、その開発の一環として、EastBanc Technologiesのスペシャリストが別のモジュールを作成しました。これは、 BOSS-Kadrovik自動人事管理システムと統合して休暇申請を管理するサービスです。



このサービスの目的は、私たちに思われるように、詳細な説明を必要としません。簡単に言えば、サービスは会社の休暇の会計を自動化します。 この特定の会社で私たちが実際にどのような課題に直面したかは、さらに興味深いことです。



分析


ロシア連邦の労働法に基づき、年次基本有給休暇は、会社での就業初日から6か月後に従業員に付与され、その後毎年休暇のスケジュールに従って作成された休暇の提供の命令に基づいて付与されます。 従業員の「アカウント」での作業の毎月は、2.33日の有給休暇を累積します。 有給休暇:メインの年次、追加、メインの有給休暇、事前の追加休暇。 そして、別のタイプは管理休暇です。



これらのタイプの休日のアプリケーションは自動化する必要がありました。 私たちのタスクは次のとおりです。



  1. 休暇申請の登録と承認のために、企業ポータルの便利なインターフェースを従業員に提供します。 従業員は、自由に使える日数を確認し、承認のための申請書を長に送ることができなければなりません。
  2. 従業員の頭が休暇中のリクエストを自動モードで調整できるようにします。
  3. 実際のデータを、人事部が持っている計画データ(BOSS-Kadrovikシステムに保存されている)と同期します。
  4. 紙のワークフローを最小限に抑えます。


技術的な観点から、以下を考慮する必要があります。



  1. このサービスは、すでに馴染みのある会議予約サービスのスタイルとロジックを維持しながら、個人アカウントに統合する必要がありました
  2. ソリューションはMS SharePoint 2010に実装されましたが、開発プロセスのすべての参加者は2013年への移行の必要性を既に理解しており、これは後にEastBanc Technologiesによって実施されました


UI


ここではすべてがシンプルでした。会議室と同じ精神で行動すること(クリック可能な写真、新しいウィンドウで開きます)。





「私のオフィス」:特定の期間に利用可能な休暇日数、独自のアプリケーションとそのステータス、およびセクション「アーカイブ」-ステータスのある部下のアプリケーションが表示されます。 [リクエストの追加]ボタンは独立しています。





「私のオフィス」は人事部の従業員です。ここではすべてが同じです。「承認申請」セクションのみが追加され、会社全体から人事担当者に届きます。





休暇申請-従業員の観点から。 彼はこのフォームに記入し、承認のために彼のユニットの長にそれを送り、その後それは人事担当者に飛びます。





従業員からの休暇の申請-この形式では、従業員の直属の部長(部長)に届きます。





従業員からの休暇申請-この形式では、従業員の直属の上司による承認後に人事担当者に届きます。





特定の部門の年次休暇スケジュールは、人事担当者が見るものです。





1ヶ月間の部門での休暇のスケジュール-人事担当官が彼を見て。



ポータル上のアプリケーションのストレージ


実際の休暇と計画された休暇に関する情報を保存するために、SharePointでリストを作成しました。







BOSS-HRとの統合


SharePointの情報は、SharePoint Jobを使用したファイル共有によるBOSS-Kadrovikシステムから取得されます。 また、合意された申請に関する情報をBOSS-Kadrovikに送り返します。



従業員の従業員番号をActiveDirectoryのアカウントに関連付けるために、User Profile Serviceを使用してemployeeIDフィールドが追加され、SharePointに「スクロール」されました。







別の問題は休暇スケジュールでした。 実際の休暇と計画された休暇のリストは約10万行であり、User Profile Serviceで従業員を特定するのは面倒です。 したがって、Search Serviceアプリケーションを構成し、SharePoint 2013で変更されたKeywordQueryメカニズムを使用して、ユーザーに関するすべての必要な情報を取得します。



ResultTableCollection rtc = null; var kwq = new KeywordQuery(site) { QueryText = String.Format(querySchema, employeeIdField, nameField, departmentField, department, officeField, office), ResultTypes = ResultType.RelevantResults, KeywordInclusion = KeywordInclusion.AllKeywords, HiddenConstraints = "scope:" + "\"People\"" }; SearchExecutor se = new SearchExecutor(); rtc = se.ExecuteQuery(kwq);
      
      







ロシア連邦の労働法に準拠するために、ユーザーの申請を確認しました。主要な有給休暇の期間は7日間の倍数であり、休暇の1つは少なくとも2週間続く必要があります。 このチェックに加えて、「休日」の追加チェックが追加されました。計画された出張または休暇に関する情報は、BOSS-Kadrovikから提供されます。最近では休暇の申請が禁止されています。

また、休日を「積み重ねる」ことができます。たとえば、14日間の主要な有給休暇に7日間の管理休暇を「付加」します。



共有に使用されるデータ形式:



1.実際の休暇と計画された休暇(BOSS-KadrovikからBOSS-Kadrovikへ-同一フォーマット)



imployeeId; fromDate; toDate;タイプ

59; 2010-08-09 00:00:00; 2010-08-22 00:00:00; 0

59; 2007-06-01 00:00:00; 2007-06-15 00:00:00; 0

59; 2007-08-15 00:00:00; 2007-09-04 00:00:00; 0

59; 2012-06-25 00:00:00; 2012-07-15 00:00:00; 0

59; 2012-09-01 00:00:00; 2012-09-07 00:00:00; 0

59; 2013-04-29 00:00:00; 2013-05-06 00:00:00; 0

59; 2013-07-01 00:00:00; 2013-07-21 00:00:00; 0



2.休暇の利用可能日(BOSS-Kadrovikから)



imployeeId; fromDate; toDate; mainVacationDays; additionalVacationDays

59; 2013-06-20 00:00:00; 2014-06-19 00:00:00; 14.0000; 3.0000

59; 2012-06-20 00:00:00; 2013-06-19 00:00:00 ;, 0000; 3,0000

59; 2011-06-20 00:00:00; 2012-06-19 00:00:00 ;, 0000; 3,0000

59; 2008-06-20 00:00:00; 2009-06-19 00:00:00; 1.0000 ;, 0000

59; 2007-06-20 00:00:00; 2008-06-19 00:00:00; 3.0000 ;, 0000



3.欠勤、欠勤、出張に関する情報(BOSS-Kadrovikから)



imployeeId; fromDate; toDate;タイプ

5236; 2007-03-12 00:00:00; 2007-03-16 00:00:00; 出張

5249; 2007-03-09 00:00:00; 2007-03-18 00:00:00; 出張

209; 2007-03-19 00:00:00; 2007-03-19 00:00:00; 障害児の親の休日



実装


アプリケーションを作成/編集/表示するためのフォームを実装するために、UseLegacyForm属性を使用して、対応するリストのschema.xmlでSharePoint要素を編集するための標準ダイアログを再定義しました。



 <Forms> <Form Type="DisplayForm" Url="DisplayForm.aspx" WebPartZoneID="Main" UseLegacyForm="TRUE" /> <Form Type="EditForm" Url="EditForm.aspx" WebPartZoneID="Main" UseLegacyForm="TRUE" /> <Form Type="NewForm" Url="NewForm.aspx" WebPartZoneID="Main" UseLegacyForm="TRUE" /> </Forms>
      
      







定義からわかるように、これらは基本的に通常のaspxページですが、一意のコンテンツプレースホルダーがあります。

たとえば、タイトルタグの場合:



 <asp:Content ID="Content1" ContentPlaceHolderID="PlaceHolderPageTitle" runat="server">    </asp:Content>
      
      







詳細については、 office.microsoft.com / en-us / sharepoint-designer-help / working-with-content-placeholder-controls-HA102265026.aspxをご覧ください。



UIには、jQuery UIを使用しました。



また、アプリケーションを表示するためのポップアップウィンドウで、このアプリケーションの承認履歴を表示する必要がありました。 これを行うために、アプリケーションのリストのルックアップフィールドを持つ「アプリケーション承認履歴」リストを作成しました。 そして、CAMLリクエストを使用してビューを定義しました:



 <Query> <Where> <Eq> <FieldRef Name="Request" LookupId="TRUE" /> <Value Type="Lookup"> <GetVar Scope="Request" Name="Id"/> </Value> </Eq> </Where> <OrderBy> <FieldRef Name="ID"></FieldRef> </OrderBy> </Query>
      
      







パラメーターId(これはアプリケーションのリストのIdです)は、一般に理解できる要求パラメーターから取得されます。 アイテムビューフォームを開くためにSharePointによって生成されるリンクは次のとおりです。



 {$HttpVDir}/_layouts/15/listform.aspx?PageType=6&ListId={$List}&ID={$ID}
      
      







さらに、承認履歴のリスト、特定のアプリケーションへの提出、およびaspxアプリケーションの表示ページについて、xls表現が宣言されました。



 <File Path="RequestList/DisplayForm.aspx" Url="Lists/RequestList/DisplayForm.aspx"> <View WebPartOrder="1" WebPartZoneID="Main" BaseViewID="2" List="$Resources:core,lists_Folder;/RequestHistoryList" > <![CDATA[ <webParts> <webPart xmlns="http://schemas.microsoft.com/WebPart/v3"> <data> <properties> .... <property name="XslLink" type="string">/_layouts/15/ETR.VacationRequest/xsl/history.xsl</property> .... </properties> </data> </webPart> </webParts> ]]> </View> </File>
      
      





コードから、ビューがwebpartゾーンWebPartZoneID = "Main"のLists / RequestList / DisplayForm.aspxページにあることは明らかです。 そのようなゾーンがページに存在することを確認するためにのみ残ります:



 <WebPartPages:WebPartZone runat="server" FrameType="None" ID="Main" Title="loc:Main" />
      
      







休暇スケジュールでは、さらに進んだ。 カレンダー形式のリストの標準表示は、私たちにも顧客にも適していない。 したがって、私たちはデザイナーにタスクを与え、彼らはこの美しいカレンダーを描きました:







顧客の承認を受けて、作業を開始しました。まず、会議予約サービスの例に従って、jsonを返すと同時にSharePointのコンテキストで機能するWCFサービスを作成しました。



定義されたDataContract:



 [DataContract(Name = "Vacation")] public class Vacation { [DataMember(Name = "fromDate")] public DateTime FromDate { get; set; } [DataMember(Name = "toDate")] public DateTime ToDate { get; set; } [DataMember(Name = "type")] public int Type { get; set; } } [DataContract(Name = "employeeData")] public class EmployeeData { [DataMember(Name = "id")] public int Id { get; set; } [DataMember(Name = "name")] public string Name { get; set; } [DataMember(Name = "vacations")] public List<Vacation> Vacations { get; set; } } [DataContract(Name = "departmentData")] public class DepartmentData { [DataMember(Name = "name")] public string Name { get; set; } [DataMember(Name = "office")] public string Office { get; set; } [DataMember(Name = "employees")] public List<EmployeeData> Employees { get; set; } }
      
      





KeywordQueryを使用してユーザーデータを収集し、単純なCAMLリクエストを使用して休暇データを収集しました。 カスタムレイアウトを作成し、jQueryとKnockOutを組み合わせて、必要なインターフェイスを実装しました。



結果


その結果、休暇会計のビジネスプロセスを自動化することで、顧客のニーズを完全に満たすことができました。 顧客企業の従業員にとって、休暇費用は、書類を駆け回るのではなく、簡単で楽しい申請書記入プロセスから始まります。 また、休暇日数に関する情報や提出された申請書のステータスに関する情報に常に無料でアクセスできます。



従業員の責任者は、部下の休暇のスケジュールに関する完全で正式な情報を持ち、部隊の活動をより効果的に計画でき、最も重要なのは自分の休暇です。



しかし、もちろん、人事部門が最も勝ちました。第1に、休暇申請サービスは数字のランダムエラーに対する保護であり、第2に、すべての休暇中に必然的に増加する紙のワークフローを大幅に削減します。 BOSS-Personnelとの統合により、人事部門は人件費と人件費の分析会計を効果的に実施できます。



All Articles