「[[.NET 開発基盤部会 Wiki>http://dotnetdevelopmentinfrastructure.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。

-[[戻る>SaaS設計のポイント]]

*目次 [#ybad882d]
#contents

*概要 [#l679a48e]
[[QandAAnalysisEngine>https://github.com/NetDevInfraWGinOSSConsortium/QandAAnalysisEngine]]の開発で検討したこと。

*[[開発環境]] [#v0d5c726]

*HTML系 [#pbe32a9a]
-インタラクティブなコンテンツを使用してアンケート的なデータを収集。

-タブレットを主要なプラットフォームに考えている。
--クロスプラットフォームで動作するように、HTML5で実装する。
--通信環境(Wi-Fi)が悪いことが考えられるので、オフライン対応実装をする。

**オフライン [#a40275be]
-オンライン環境でない場合に、オフラインで動作する方法を検討する。
-実装はHTML(HTML5)のWeb技術を使用する(スマホ・ネイティブ解らんので)。
-オフライン時に[[WebStorage>HTML#wb728540]]に溜め込んでバッチ送信みたいなことを考えている。
-色々考え、処理系をオンライン・オフラインと切り替える必要があるので結構難しそうだと感じた。
-切り替えが面倒なので、一律、
--ローカルストレージに蓄積
--定期的な情報送信を行う。

>という方式が良いと考えた。

***チェック [#q38a2c13]
window.navigator.onLineでチェック可能。

-window.navigator.onLine - Web API インターフェイス | MDN~
https://developer.mozilla.org/ja/docs/Web/API/NavigatorOnLine/onLine

***[[ストレージ>HTML#l92a65cd]] [#p8da057b]
-ポピュラーな、Key-Valueの[[WebStorage>HTML#wb728540]]が良さそう。
-スコープの関係から、[[WebStorage>HTML#wb728540]]のSession-Storageを選択。

**定期的な情報送信 [#ebdb9803]
***[[バック・グラウンド処理>JavaScript#d6ac8bf9]] [#kff9de37]
setTimeoutやsetIntervalなどを用いることで実現できる。~
最新の「Web Workers」については、別に使用しなくていもイイかな。という感想。

***JSON処理 [#na0590e9]
-[[クライアント側(JavaScript)>JavaScript#ff279ce5]]

-サーバー側(WCF)~
web.configの書き方は、下記のosscons.jpのマイクロソフト系技術情報 Wikiが参考になる。
--[[JSONを送受信するRESTサービスを作成する方法 - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?JSON%E3%82%92%E9%80%81%E5%8F%97%E4%BF%A1%E3%81%99%E3%82%8BREST%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95]]~
>web.configの書き方が間違っていると動かないので注意

***成功と失敗 [#jdf9d92b]
-WebAPIの戻り値での判断は、二重登録の可能性があり、少々危険だと考える。
--トランザクションが成功した後にHTTPでエラーになると二重登録になる。
--HTTPで成功した後に、Session-Storageのクリアに失敗した場合も、二重登録になる。

-上記の二重登録の問題を解決するために、レコードにIDを付与する。

--GUID
---長過ぎる。
---ライブラリが無い。

--店舗ID + 端末ID + 時間 ( yyyy/MM/dd HH:mm:ss SSS )
---店舗ID : ユーザアカウントから取得可能。
---端末ID : HTMLから取得する方法が無い。
---時間 : dateformat.jsを使用して取得可能。

-動作
--クライアント側
---成功時~
Session-Storageのクリア
---失敗時~
Session-Storageをクリアしない(リトライ)

--サーバー側動作
---成功時~
---失敗時~

**[[エフェクト>JavaScript#k0f136b5]] [#r9a59047]

***[[効果音>JavaScript#cf0fca98]] [#q90775ad]

***[[アニメーション>JavaScript#se421493]] [#h1e40799]

***二重クリックの防止 [#z5837c06]
-マスク掛け
-マスク解除(setTimeout)

上記だけでは無理だったので、~
クリック後に変更される変数値を確認する実装とした。

*業務系 [#y76d0166]

**[[業務プロセス>QandAAnalysisEngineの業務プロセス]] [#d4437b7e]

**[[画面>QandAAnalysisEngineの画面]] [#q00fee63]

**[[テーブル>QandAAnalysisEngineのテーブル]] [#f6343f2f]

**[[SQL>QandAAnalysisEngineのSQL]] [#z37ed465]

*[[マッシュアップの検討]] [#v3653a0c]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS