ComponentOne Information

ComponentOne Studio/Wijmo/Xuniの最新情報を公開中

ナレッジベース更新情報(2017/4/3~4/7)

以下の27文書を追加・更新しました。

ComponentOne製品のナレッジベースは随時更新中です。
≫ ナレッジベースはこちら

 

ナレッジベース更新情報(2017/3/27~3/31)

以下の14文書を追加・更新しました。

ComponentOne製品のナレッジベースは随時更新中です。
≫ ナレッジベースはこちら

 

ComponentOneを振り返る~2016年4月ー2017年3月~

3月も最終日となってしまいました。

4月からは新生活…なんていう方もいらっしゃるのではないでしょうか。春はドキドキワクワク、期待と不安でいっぱいですね。

さて、先日こちらの記事で告知した通り、今回は2016年のComponentOne製品の動きを、当時のブログとともに振り返りたいと思います!

 


目次

2016年 4月 5月 6月 7月 8月 9月

    10月 11月 12月

2017年 1月 2月 3月

おわりに 


 

続きを読む

WPF業務アプリで多彩なドキュメントを作成!

業務アプリケーションで作成したデータを別のシステムへ持ち出したい場合、一般的にはCSVのような形式を使用しますが、使用者に専門的な知識がなくても多くのPCで表示できる形式が望まれる場合もあります。

ComponentOne Studio for WPF」では、多彩なドキュメント生成機能を業務アプリケーションに組み込み可能です。

 

●Word形式

「C1Word Library for WPF」では、Microsoft Word(*.docx)、RTFドキュメント(*.rtf)を作成することができます。マルチフォントおよび各フォント設定、ブックマーク、ハイパーリンク、メタファイル画像の表示、複数の用紙サイズ設定などをサポートします。

f:id:ComponentOne_JP:20170330105219p:plain

●PDF形式

Adobe PDFドキュメントの作成には、「PDF for WPF」が便利です。セキュリティ、圧縮、アウトライン、ハイパーリンク、添付ファイルといった、PDFの高度な機能もサポートしています。

f:id:ComponentOne_JP:20170330105312p:plain

●Excel形式

「Excel for WPF」を使用すれば、行、列、セルで構成される単純なグリッドを使用するように、Microsoft Excelファイルを作成/編集/ロード/保存することができます。

f:id:ComponentOne_JP:20170330105413p:plain

 

以下の記事では、これらのコンポーネントを利用するための使用方法が紹介されています。


「ComponentOne Studio」を使用して、業務のデータを直接資料として出力する機能をアプリケーションに組み込んでみませんか? 

≫≫ WPF開発で役立つコンポーネントセット「ComponentOne Studio」

 

この記事はグレープシティが発行するメールマガジン「PowerNews」の第467号(2017/3/23発行)に掲載された記事を、加筆修正して転載したものです。  
≫グレープシティの最新情報を発信!メールマガジン「PowerNews」
製品の最新情報、プログラミングに役立つコラムのほか、プレゼント企画やセミナーのご案内など、日々の開発業務に役立つ情報をお送りしています。 
PowerNews - メールマガジン | GrapeCity Developer Tools 

毎月最終金曜日を判定してカレンダーに表示するには?

「プレミアムフライデー」
2017年2月からはじまった、日本政府が推進する消費拡大を目的としたキャンペーンです。

平日に勤務する従業員が月に一度、仕事を早く切り上げて早く帰宅することで、一足早い週末に突入して人生を謳歌しようではありませんか。という施策です。
はじまったばかりで未知数ですが、何もやらないよりはプラスに働くのではないでしょうか。

この制度を普及させるにはカレンダーに表示することも大切です。
ということでXuni(ズーニー)のコンポーネントであるCalendarを利用してモバイルアプリにプレミアムフライデーを表示してみます。

Xamarin.FormsでXuniを利用する方法や、カレンダーを表示する方法については、以前の記事で紹介しています。

今回のメインテーマは、プレミアムフライデーがいつであるか?です。
サンプルアプリの中に組み込むことに挑戦します。

最終金曜日はいつ?

当然ですが、最終金曜日の日付はその時によって異なります。 2017年3月であれば2017年3月31日が金曜日で、4月は28日、5月は26日です。 これを求める関数は用意されていませんので、自分で作成する必要があります。

それではC#で対象月の最終金曜日を求める関数を作ります。 考え方はシンプルです。

手順
1. 対象となる月の最終日とその曜日を求める
2. その日から月初方向にさかのぼる
3. 最も近い金曜日が最終金曜日

最終日と曜日はシステムで提供されている関数を利用すれば求めることができます。 また、最終日は「翌月の1日の前日」として求めます。 コードは以下です。

// 対象月の最初の日である1日を求める 例)2017/3/1
var firstDate = new DateTime(date.Year, date.Month, 1); 
// 求めた日の翌月1日の前日(当月の最終日)を求める 
// 例) 2017/3/1の翌月2017/4/1の全日2017/3/31
var lastDate = firstDate.AddMonths(1).AddDays(-1);

これで最終日がわかりました。前述の手順 1. が完了しました。 ここから、手順2-3を実装すればプレミアムフライデーがわかります。

まず、最終日の曜日は金曜日とは何日離れているかを求めます。 DayOfWeekクラスの各曜日は、0[日曜日]~7[土曜日]までの整数です。これをint型にして引き算します。

曜日対応表

曜日
数値 0 1 2 3 4 5 6

金曜日との差分を求めるコード

// 金曜日(6)から対象日付の曜日差を求める 例) 6-6[3/31] = 0
var subs =  (int)DayOfWeek.Friday -(int)lastDate.DayOfWeek;

差分は0なので、さかのぼる必要なく3月31日が最終金曜日であることがわかります。

2017年4月の場合は、この計算式で求める差分は6-0[4/30は日曜日]で6になります。しかし、この差分を利用すると日曜日から6日さかのぼってしまい月曜日になってしまいます。正しくは日曜日と金曜日の差、つまりさかのぼる日数は-2です。

曜日
結果 0 4 3 2 1 0 -1

最終日からさかのぼる

これは、日曜日からはじまるDayOfWeekのテーブルと、金曜日を基準にさかのぼる日数の並びが合わないために発生します。金曜日を軸にするとさかのぼる日数のテーブルは以下です。

曜日
日数 -2 -3 -4 -5 -6 0 -1

やむを得ないのでこれを補正してさかのぼる日数を表すテーブルを作り、インデックスでアクセスしやすいよう、土曜日スタートで逆順にしました。曜日の最大値である土曜日だけが金曜日との差分を求めるとマイナスの値になるためです。

曜日
差分 -1 0 1 2 3 4 5
日数 -1 0 -6 -5 -4 -3 -2
Index 0 1 2 3 4 5 6

プレミアムフライデー用関数?

最終的な関数のコードは以下になりました。

// 対象日付を引数に、その月の最終金曜日をDateTimi型で返す
private DateTime getPremiumFriday(DateTime date)
{
    // さかのぼる日数のテーブル 順番は、土金木水火月日
    int[] minus = new int[] { -1,0, -6, -5, -4, -3, -2, };
    
    // 対象月の初日をもとに、その月の最終日を求める    
    var firstDate = new DateTime(date.Year, date.Month, 1); 
    var lastDate = firstDate.AddMonths(1).AddDays(-1);

    // 金曜日(6)から対象日付の曜日差を求める 例) 6-6[3/31] = 0
    var subs =  (int)DayOfWeek.Friday -(int)lastDate.DayOfWeek;
    // 差分に1を加えた数が日数テーブルのインデックスになる
    return lastDate.AddDays(minus[subs +1]);
}

このコードをXuniのサンプルに適用し、プレミアムフライデーを表示した結果が以下です。なおプレミアムフライデーのロゴは、冒頭のWebサイトで申請すると利用可能になります。

f:id:ComponentOne_JP:20170329153905p:plain

モヤモヤが残る

なんとなくモヤモヤした感じが残るコードになってしまいました。
やむを得ず、テーブルを作ったのがいまひとつです。他の最終〇曜日を求めるような汎用性も欠けています。
もし、もっとスマートな方法をご存じの方は、FacebookやTwitterのアカウントにコメントをいただけると助かります。


※追記(2017/3/30)
Excel関数で実現する方法をお知らせいただきました。

こちらをもとに作成した関数に変更を加え、最終〇曜日を調べるようにしたコードを追加しました。

// 対象日付と調べる曜日を引数に、その月の最終〇曜日をDateTimi型で返す
private DateTime getPremiumDayOfWeek(DateTime date, DayOfWeek dayofweek)
{
    // 対象月の初日をもとに、その月の最終日を求める    
    var firstDate = new DateTime(date.Year, date.Month, 1);
    var lastDate = firstDate.AddMonths(1).AddDays(-1);

    // その月の最後の7日間の曜日を調べ、該当する日付を特定する
    DateTime premiumDay = new DateTime();
    for (int i = 0; i < 8; i++)
    {
        premiumDay = lastDate.AddDays(i * -1);
        if (premiumDay.DayOfWeek == dayofweek)
            break;
    }
    return premiumDay;
}

※追記(2017/7/26)

この記事で紹介している「Xuni(ズーニー)」は、2017年7月に提供を終了し、新たに「ComponentOne Studio for Xamarin」として提供しています。

Angular 4がリリース

先日3/23に、Angular 4.0.0がリリースされました。Angular 4.0.0は、ほとんどのアプリケーションでAngular 2.x.xとの後方互換性があるとアナウンスされています。

angularjs.blogspot.jp

Wijmoの現時点での日本語最新版(5.20163.281)では、Angular 2.4.0で動作確認していますが、Angular 4でも動作確認を行い、確認結果は本ブログでお知らせする予定です。

現時点では、下記Angularクイックスタートと全く同じ方法で、Wijmoを使用したAngular 4.0.0アプリケーションを作成できることを確認しております。

hatena.c1.grapecity.com

Angular CLIでAngular 4.0.0アプリケーションを作成するには、最初にAngular CLIをアップデートする必要があります。

npm update -g @angular/cli

2017/5/17 更新

本日2017/5/17にWijmo 2017Jv1をリリースして、Angular 4.0.0に対応しました。今後もAngularの新バージョンには随時対応していく予定です。

なお、Wijmoが対応するAngularやTypeScriptなどのバージョンは、Wijmo更新履歴の「依存関係」をご参照ください。

ナレッジベース更新情報(2017/3/21~3/24)

以下の14文書を追加・更新しました。

ComponentOne製品のナレッジベースは随時更新中です。
≫ ナレッジベースはこちら

 

ComponentOne