Share point開発 勤怠管理

307 views

Published on

Excelベースの業務システムをSharePoint Onlineで実現

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
307
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Share point開発 勤怠管理

  1. 1. Visual Studioで作成する SharePointアドイン開発 勤怠登録 2016年5月 SharePoint Onlineカスタマイズ
  2. 2. 今回のお題 SharePoint Onlineで勤怠登録
  3. 3. 全体図 ユーザが入力した データよりExcelを 作成しドキュメント ライブラリに登録 ユーザはWebまたは Excelで入力
  4. 4. 利用する仕組み • クラウドビジネスアドイン • 作業時間の登録Webインタフェース • Excel(OpenXML) • 入力された作業時間をExcelレポートにして 月ごとにバックオフィスに送信 • Excelでまとめて作業時間の登録も可能
  5. 5. 入力データベース • 毎日のデータをリストのアイテムにするのは無 理があるのでデータベースで管理 LightSwitchなので簡単に作れます!!
  6. 6. データ入力画面 •入力画面は一覧と追加の2つを用意 LightSwitchなので簡単に作れます!!
  7. 7. Excelへのエクスポート処理 public void Export(string filename, string email, int year, int month) { using (var helper = new SpreadsheetHelper(filename)) { if (!helper.MoveWorksheet(sheetName)) throw new ApplicationException("不正なテンプレートです。" + sheetName + "のシートがありません"); var worksheet = helper.CurrentSheet; helper.SetCellValue(emailAddressCell,email); using (var serverContext = ServerApplicationContext.CreateContext()) { var startDate = new DateTime(year, month, 1); helper.SetCellValue(startDateCell, startDate); var sb = new StringBuilder(); using (var workspace = serverContext.Application.CreateDataWorkspace()) { foreach (WorkTime item in workspace.ApplicationData.WorkTimeSet.Where(x => x.UserId == email && x.WorkDate.Year == year && x.WorkDate.Month == month)) { var rowIdx = item.WorkDate.Day - 1 + startPos; helper.SetCellValue(4,rowIdx, item.SickHolidy); helper.SetCellValue(9, rowIdx, item.StartTime); helper.SetCellValue(11, rowIdx, item.EndTime); helper.SetCellValue(16, rowIdx, item.Remark); } } } helper.Save(filename); } } OpenXMLでExcelファイルを処理
  8. 8. ドキュメントライブラリの登録 using (var serverContext = ServerApplicationContext.CreateContext()) { var appWebContext = serverContext.Application.SharePoint; using (var ctx = appWebContext.GetAppWebClientContext()) { var list = ctx.Web.Lists.GetByTitle("WorkTimeSheet"); var rootFolder = list.RootFolder; ctx.Load(rootFolder, x=>x.Folders, x=>x.ServerRelativeUrl); ctx.ExecuteQuery(); var subFolderName = year.ToString("0000") + month.ToString("00"); var subFolder = list.RootFolder.Folders.Where(x => x.Name == subFolderName).FirstOrDefault(); if (subFolder == null) { subFolder = rootFolder.Folders.Add(rootFolder.ServerRelativeUrl +"/" + subFolderName); ctx.Load(subFolder); ctx.ExecuteQuery(); } using (var st = new FileStream(filename, FileMode.Open)) { var info = new FileCreationInformation(); info.ContentStream = st; info.Overwrite = true; info.Url = subFolder.ServerRelativeUrl +"/" + email.Replace("@","_") + ".xlsx"; var file = subFolder.Files.Add(info); ctx.ExecuteQuery(); } } } LightSwitchからExcelをドキュメントライ ブラリに登録
  9. 9. まとめ • Excelベースの業務システムをSharePoint Onlineで実現 • 単純なExcelでの運用に比べて、今回の方式は入力のし易さや データの整合性、管理でメリットがある • 勤怠管理以外でも応用範囲が多い • サンプルコード • https://github.com/akihiroe/SharePointWorkTimeAddin
  10. 10. http://www.proaxia-consulting.co.jp Azure&SharePointアプリケーション開発についてのお問合せ [担当] akihiro.ehara@proaxia-consulting.co.jp SharePoint Onlineとファイルサーバーを統合するCloud Storage Light https://www.cloudstoragelight.com SharePoint 上のファイルをエクスプローラ感覚でサクサク操作するSharePointエクスプローラ https://www.cloudstoragelight.com/sharepointexplorer/

×