創立2周年記念パーティを開催しました

イメージ情報システム株式会社(略称 IIS)は今月で創立2周年を迎えることができました。 創立2周年を記念して今年も盛大なパーティを開催しました。

IISの真っ直ぐさが表現された真っ直ぐ並んだ缶
f:id:imageinformationsystem:20191003114643j:plain

今年も社長による乾杯から

今年も社長による乾杯から始まりです。
f:id:imageinformationsystem:20191003115308j:plain
去年の乾杯の様子は こちら

出張寿司

今年のパーティの目玉は 出張寿司
f:id:imageinformationsystem:20191003153834j:plain

神田神保町の老舗江戸前寿司の職人さんをお呼びして、お好みスタイル (※1) で店舗で食べるのと変わらない本格寿司を堪能しました。
f:id:imageinformationsystem:20191003114930j:plain
※1) ガラスケースのネタをお好みで握っていただくスタイル

その他充実のフード類

その他にも充実のフード類がパーティを盛り上げてくれました。
f:id:imageinformationsystem:20191003115008j:plain
f:id:imageinformationsystem:20191003115019j:plain
f:id:imageinformationsystem:20191003115030j:plain

これからのIIS

創立2年目はIISの新しいビジネスも軌道に乗りさらなる飛躍を遂げることができました。これから迎える3年目もまた新たなビジネスへのチャレンジを継続していきます。これからのIISにもぜひご期待ください。

週刊プリザンター第41号

こんにちは。IISの田口です。
先週は諸事情で徹夜作業を行いましたが、さすがに体に堪えます。
皆さんも体調にお気をつけください。

週刊プリザンター第41号です。
9/24~9/29を追いかけます。

9/30:各種の変更。(0.50.102)

以下5点の変更があります。

デモ環境登録時のメールの内容を変更。

デモ環境の利用登録を行った時に届くメールの本文に
・アプリ作成ガイド
・ユーザマニュアル
・お問い合わせ
のリンクが追記されています。

AGPLのリンクを追加。

バージョン情報の画面にバージョンが表示されていましたが、リンクが追加されました。
リンク先はGitHub上のライセンスファイルです。
f:id:imageinformationsystem:20191003195619p:plain

商用ライセンス説明のリンクを追加。

AGPLのリンクと同様に、バージョン情報画面に「商用ライセンスへの切り替え」というリンクが追加になりました。
リンク先はインプリム社ホームページです。

利用ガイドをユーザーマニュアルに変更。

今までは「利用ガイド」という名称でしたが、今バージョンより「ユーザーマニュアル」と変更になりました。
リンク先は先週号でお伝えした新しいサイトになります。 f:id:imageinformationsystem:20191003195557p:plain

検索ダイアログの表示順をタイトル順に変更

テーブルをリンクした分類項目において、プルダウンと検索ダイアログで表示順序が異なっていましたが、プルダウンの表示と同じ順序となるように修正されています。

こんなマスタを選択肢とするようにリンクを張って
f:id:imageinformationsystem:20191003195443p:plain プルダウンで表示すると、選択肢はタイトルの昇順で表示しますが、
f:id:imageinformationsystem:20191003195522p:plain 検索ダイアログでは、IDの昇順に表示していました。
f:id:imageinformationsystem:20191003195530p:plain 今回の修正で検索ダイアログでもタイトルの昇順に修正されています。 f:id:imageinformationsystem:20191003195541p:plain

バージョンアップに追いつけ!

プリザンターは日々進化しつづけて、新しい機能が追加されています。 皆さんの参考になるよう毎週紹介していきたいと思いますので、ご期待ください!

「+読者になる」のお願い

プリザンターの他、C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターの機能、拡張スクリプト、ページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

最後に  

IISはプリザンターのスクリプトによるカスタマイズの経験が豊富です。
プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
またご不明点やご質問などございましたら弊社までお問い合わせください。

週刊プリザンター第40号

こんにちは。IISの田口です。
先週風邪を引きましたが、思いのほか悪化せずに直りました。丈夫な体に感謝です!健康第一!! 皆さんも体調にお気をつけください。

週刊プリザンター第40号です。
9/17~9/23を追いかけます。

今週は・・・

大きな機能追加がなく、不具合解消やソースコードリファクタリングなどで6個のアップデートが実施されています。
その中で大きな変更点はこちら!!

利用ガイドが変更になりました!

右上のメニューに「利用ガイド」をクリックすると、今まではGitHub上のマニュアルページが開きました。 f:id:imageinformationsystem:20190927190702p:plain

今までの利用ガイドページ(=GitHub上のマニュアルページ)

f:id:imageinformationsystem:20190927190709p:plain

今回、専用に作られた利用ガイドページが開くようになりました。

新しい利用ガイドページ

f:id:imageinformationsystem:20190927190716p:plain この利用ガイドはプリザンターの情報公開機能(0.49.72でリリース)で作成されています。
プリザンターではこんな使い方も出来るんだというケースとしてもとても興味深いですね。

週間プリザンター的に注目したいのは、利用ガイドに「開発者向け機能」というページが出来ている点です!
週刊プリザンターや弊社主催の勉強会でも説明した$p.apiCreate等のスクリプト機能が、本家サイトで正式に説明されています。
f:id:imageinformationsystem:20190927190724p:plain こちらの内容も今後注目していきたいです!

バージョンアップに追いつけ!

プリザンターは日々進化しつづけて、新しい機能が追加されています。 皆さんの参考になるよう毎週紹介していきたいと思いますので、ご期待ください!

「+読者になる」のお願い

プリザンターの他、C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターの機能、拡張スクリプト、ページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

最後に  

IISはプリザンターのスクリプトによるカスタマイズの経験が豊富です。
プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
またご不明点やご質問などございましたら弊社までお問い合わせください。

週刊プリザンター第39号

こんにちは。IISの田口です。
涼しくなったり暑さが戻ったり季節の変わり目です。案の定風邪を引いてしまいました。
皆さんも体調にお気をつけください。

週刊プリザンター第39号です。
9/9~9/16を追いかけます。

今週は・・・

大きな機能追加がなく、不具合解消やソースコードリファクタリングなどで1個のアップデートが実施されています。

バージョンアップに追いつけ!

プリザンターは日々進化しつづけて、新しい機能が追加されています。 皆さんの参考になるよう毎週紹介していきたいと思いますので、ご期待ください!

「+読者になる」のお願い

プリザンターの他、C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターの機能、拡張スクリプト、ページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

最後に  

IISはプリザンターのスクリプトによるカスタマイズの経験が豊富です。
プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
またご不明点やご質問などございましたら弊社までお問い合わせください。

週刊プリザンター第38号

こんにちは。IISの田口です。

色々忙しくなってくると段々周りが見えなくなってきます。
そんなときこそ落ち着いて周りを見渡せるような人になりたいと思った今日この頃です。

週刊プリザンター第38号です。
9/2~9/8を追いかけます。

9/6:APIの利用上限パラメータを追加。(0.50.100)

プリザンターは標準でAPIが提供されており、データの取得・登録・更新・削除をAPI経由で行うことが出来ます。
現状はAPI発行回数に制限はありませんが、今回の追加機能で各テーブルに対して1日当たりの上限回数を設定出来るようになりました。
設定は\Parameters\Api.jsonに"LimitPerSite"というキーが追加されています。
デフォルトは0(制限しない)になっています。
f:id:imageinformationsystem:20190912153558p:plain

APILimitPerSiteで設定した回数を超えるとAPIの処理結果として、以下のようなメッセージが返却されます。
f:id:imageinformationsystem:20190912153615p:plain

なお、各テーブルに対する1日当たりのAPI発行回数はSitesテーブルで管理します。
管理用に以下のカラムが追加されています。

項目 説明
ApiCountData API発行時のタイムスタンプ。
当日の初回発行時に更新する。
ApiCount 1日当たりのAPI発行回数。
ApiCountDateの更新と合わせてカウントし直す。

その他

不具合解消やソースコードリファクタリングなどで4個のアップデートが実施されています。
そのうち2点をピックアップして紹介します。

添付ファイルの復元が行えない問題を解消。

添付ファイル項目にファイルを添付したレコードを削除し、ごみ箱から復元した際、今まではレコードのみが復元され、添付ファイルが復元されませんでした。(クリックしてもファイルダウンロード出来ない)
これが添付ファイルも正しく復元されるように修正されています。

削除時の戻り先への遷移をbackに修正。

編集画面のリンク欄からリンク元データに遷移しそのデータを削除した場合や、サイト統合設定を行ったテーブルの一覧からレコードを選択しそのデータを削除した場合などは、本来であれば編集画面やサイト統合テーブルに戻って欲しいのですが、実際には削除したデータが登録していたテーブルの一覧に戻ってしまいます。
これを編集画面なりサイト統合テーブルなりに戻るように修正されています。

バージョンアップに追いつけ!

プリザンターは日々進化しつづけて、新しい機能が追加されています。 皆さんの参考になるよう毎週紹介していきたいと思いますので、ご期待ください!

「+読者になる」のお願い

プリザンターの他、C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターの機能、拡張スクリプト、ページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

最後に  

IISはプリザンターのスクリプトによるカスタマイズの経験が豊富です。
プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
またご不明点やご質問などございましたら弊社までお問い合わせください。

週刊プリザンター第37号

こんにちは。IISの田口です。
9月になりました。あっという間に夏が終わってしまったようです。
皆さんは夏を満喫しましたか?

週刊プリザンター第37号です。
8/26~9/1を追いかけます。

8/26:一括更新機能を追加。(0.50.93)

一覧画面である項目を一括で更新する機能が追加されました。
「テーブルの管理」ー「エディタ」にて各項目の詳細設定画面に『一括更新を許可』という設定項目が追加されています。
※ID、バージョン、コメント、添付ファイル項目には『一括更新を許可』はありません。
f:id:imageinformationsystem:20190906183103p:plain

『一括更新を許可』を設定すると一覧画面下部に「一括更新」ボタンが表示します。
このとき、一括更新を許可した項目が一覧画面上に表示していなくても一括更新ボタンが表示します。 f:id:imageinformationsystem:20190906183124p:plain

一括更新ボタンをクリックすると更新内容を入力するダイアログが表示します。
f:id:imageinformationsystem:20190906183142p:plain

ダイアログの項目プルダウンには一括更新を許可した項目が表示しますので、該当の項目を選択します。
選択した項目に応じて、下段の入力欄が表示し直します。
分類/数値/チェックボックス等それぞれの項目で設定した内容で表示します。
f:id:imageinformationsystem:20190906183201p:plain

値を入力後、「一括更新」ボタンをクリックすると、一覧画面下部に更新後メッセージが表示され、一覧画面上も更新した値が表示します。
f:id:imageinformationsystem:20190906183314p:plain

8/26:部分一致検索を規定値に設定を追加。(0.50.93)

テーブルの管理-検索タブの「検索の種類」の規定値が"フルテキスト"から"部分一致"に変更になりました。
f:id:imageinformationsystem:20190906183341p:plain

8/26:CodeDefinerでフルテキストインデックスを自動生成する仕様に変更。(0.50.93)

初回インストール時はオンラインマニュアルにもあるとおり、フルテキストインデックスの設定を手動で行っておりましたが、インストール時に自動的に作成される仕様に変更になりました。

8/26:ダイアログのリサイズを禁止する仕様に変更。(0.50.93)

パスワード変更や、パスワードリセット、エクスポート、インポートなどなどで各種ダイアログが表示しますが、このダイアログが今まではマウスでサイズ変更が出来ましたが、やたらに小さくしたりするとテキストボックスなどのデザインが崩れる場合がありました。
今回ダイアログがリサイズ禁止で開くように修正されています。
個人的には、ユーザから「なんかデザインが変になったんだけど?」のような問い合わせが減るような気がします。

8/26:分割機能を有効化するスイッチを追加。(0.50.93)

期限付テーブルにおいて、今までは編集画面上に「分割」ボタンが表示していましたが、この分割機能をスイッチで制御できるようになりました。
期限付テーブルの「テーブルの管理」-「エディタ」に『分割を許可』というチェックボックスが追加になっています。デフォルトはOFFです。
これをチェックONにすると今までのように編集画面上に分割ボタンが表示します。
f:id:imageinformationsystem:20190906183458p:plain

8/28:テーブルロックの有効化/無効化スイッチ設定を追加。(0.50.94)

0.50.1版で追加されたテーブルロック機能ですが、今回はロック機能の有効/無効を選択出来るスイッチが追加されています。
「テーブルの管理」ー「エディタ」に『テーブルのロックを許可』というチェックボックが追加になっています。デフォルトはOFFです。
これをチェックONにすると画面上部の「管理」メニューに「テーブルをロックする」が表示します。
f:id:imageinformationsystem:20190906183546p:plain

8/28:$p.loginId / $p.userId / $p.userName / $p.referenceTypeを追加。(0.50.94)

スクリプトで以下のfunctionが追加になりました。

function名 説明
$p.loginId ログインIDを返却します。
$p.userId ユーザIDを返却します。
ユーザIDはプリザンターのDBでユーザを特定するキー項目です。
$p.userName ユーザ名を返却します。
$p.referenceType サイト種別を返却します。サイト種別は以下の種類になります。
  • Sites:フォルダ
  • Isuses:期限付きテーブル
  • Results:記録テーブル
  • Wikis:Wiki
  • サンプルとして以下のスクリプトを実行してみると

    $p.events.on_grid_load= function() {
        alert(
            'ログインID:' + $p.loginId() +
            '\nユーザID :' + $p.userId() +
            '\nユーザ名: ' + $p.userName() +
            '\nサイト種別:' + $p.referenceType()
        );
    }
    

    このような結果となります。 f:id:imageinformationsystem:20190906183604p:plain

    その他

    不具合解消やソースコードリファクタリングなどで5個のアップデートが実施されています。

    バージョンアップに追いつけ!

    プリザンターは日々進化しつづけて、新しい機能が追加されています。 皆さんの参考になるよう毎週紹介していきたいと思いますので、ご期待ください!

    「+読者になる」のお願い

    プリザンターの他、C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターの機能、拡張スクリプト、ページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

    最後に  

    IISはプリザンターのスクリプトによるカスタマイズの経験が豊富です。
    プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
    またご不明点やご質問などございましたら弊社までお問い合わせください。

    プリザンターとRedmineでAPIを使用してチケットを連携する

    プリザンターは素晴らしいソフトウェアですが、(他のあらゆるソフトウェアがそうであるように)どのような場合でも最も適した選択肢というわけではありません。 システムエンジニアが作業タスクを管理することを考えると非常に優れたツールですが、エンジニアが使う他のツールとの連携にはまだ大きな伸びしろがあります。

    無理に一つのツールに統一するよりも、システムエンジニアシステムエンジニアの、エンジニアはエンジニアの使い勝手のいいツールをそれぞれ使うのが最も生産性が高まる(かもしれません)。

    今回実現するもの

    システムエンジニアはプリザンターを、エンジニアはRedmineを使うものとし、両ツール間のデータ連携を実現します。
    どちらのツールもクラウドサービスだけでなくオンプレミスで構築可能である点が大きな特徴です。この特徴を生かすため、クラウドサービスを使用しない連携を実現します。

    実現したもの

    今回はシンプルに要点だけを説明するため次の単機能の連携ツールを作りました。

    ・ プリザンターに登録したレコードを定期的にRedmineにも自動登録する

    動作イメージ

    Redmine初期状態 - チケットが空

    f:id:imageinformationsystem:20190819105354j:plain

    プリザンターにレコードを新規作成

    f:id:imageinformationsystem:20190809115819j:plain

    Redmineへ連携される

    f:id:imageinformationsystem:20190809115828j:plain

    プリザンターにレコードをさらに新規作成

    f:id:imageinformationsystem:20190809115842j:plain

    Redmineへ連携される

    f:id:imageinformationsystem:20190809115853j:plain

    概要

    プリザンターとRedmineAPIを叩くPowerShellスクリプトを組みました。
    このスクリプトをプリザンターやRedmineを動かしているサーバなどで定時実行すればデータが連携されます。

    スクリプト

    組んだスクリプトです。

    # プリザンター設定
    #   プリザンターのURL
    #   プリザンター上の連携するテーブルのID
    #   プリザンターAPIを使用する際のAPIキー
    $pleasanter_url = "http://localhost:1759/"
    $pleasanter_tableId = "{プリザンター上の連携するテーブルのID}"
    $pleasanter_apikey = "{プリザンターのAPIキー}"
    
    # Redmine設定
    #   RedmineのURL
    #   RedmineAPIを使用する際のAPIキー
    $redmine_url = "http://localhost:1760/"
    $redmine_apikey = "{RedmineのAPIキー}"
    
    # データを取得
    #   プリザンターから連携するテーブルのレコードを取得
    #   Redmineから連携するプロジェクトのIssueを取得
    $pleasanter_data = ((Invoke-WebRequest ($pleasanter_url + "api/Items/" + $pleasanter_tableId + "/Get") -Method POST -Body ('{ "ApiKey": "' + $pleasanter_apikey + '", }')).content | ConvertFrom-Json).Response.Data
    $redmine_issues  = ((Invoke-WebRequest ($redmine_url + "issues.json?key=" + $redmine_apikey) -Method GET).content | ConvertFrom-Json).issues
    
    # 連携処理で追加された場合にRedmineのIssueに設定されるプリザンター側のレコードIDのリスト(1)を作成
    $redmine_pids = 
        foreach($issue in $redmine_issues) {
            foreach($custom_field in $issue.custom_fields.Where({ $_.name -eq "pid" })) {
                $custom_field.value
            }
        }
    $redmine_pids = $redmine_pids | Sort-Object | Get-Unique | Where-Object {$_}
    if(!$redmine_pids) { $redmine_pids = @(-1) }
    
    # (1)にIDの存在しないプリザンター上のレコードのリスト(2)を作成
    $pleasanter_to_redmine_data = $pleasanter_data | Where-Object {!$redmine_pids.Contains($_.ResultId)}
    
    # (2)のレコードをRedmineに登録
    $pleasanter_to_redmine_data | ForEach-Object {
        $body = '{ "issue": {"project_id": 1, "subject": "' + $_.Title + '", "description": "' + ($_.Body -replace "`n","\n") + '", "priority_id": 4, "custom_fields":[{"id":1,"value":' + $_.ResultId + '}]}}'
        $bytes = [Text.Encoding]::UTF8.GetBytes($body);
        Invoke-RestMethod ($redmine_url + "issues.json?key=" + $redmine_apikey) -Method POST -Body $bytes -ContentType application/json > Out-Null
    }
    

    少し長いですが、このスクリプト1本だけでデータ連携が実現できました。

    解説

    プリザンター設定 Redmine設定

    まず最初に、環境によって変わる情報を設定しています。

    データを取得

    それぞれのツールのAPIを使用して現在登録されているレコード/チケットを取得しています。
    APIはHTTPへのアクセスなので、Invoke-WebRequestコマンドを使用しています。POSTで送信するデータは -Body でJSON形式の文字列を与えています。今回は条件なしで取得しているので

    {
         "ApiKey": "apikey",
    } 
    

    というシンプルなデータです。

    その後、帰ってきたレスポンスから.contentプロパティで結果のJSON文字列を取り出し、パイプラインでConvertFrom-Jsonコマンドへつなぎオブジェクトにしています。

    RedmineはRestAPIなので、単純なGETリクエストになっています。ConvertFrom-Jsonコマンドでオブジェクトにするのは同様です。

    レコードIDのリスト(1)を作成

    今回、Redmine上のカスタムフィールドとしてpidという名前でプリザンター上のレコードのIDを登録しています。このカスタムフィールドに未登録のIDを持つレコードだけをRedmineへチケット追加することで、同じデータが何個も生まれることを防いでいます。
    そのカスタムフィールドpidの値のリストを作っています。

    ここは少し面倒な実装をしています。
    issueのリストの中のissue一件ずつの中にあるカスタムフィールドのリストの中のpidフィールドをリストにする、必要があります。日本語で書いても面倒ですね。
    今回は、ifやforeachなどが値を返すPowerShellの仕様を利用して、二段階foreachからの返却値を変数に取っています。

    その後、結果から重複したIDを一つにまとめ、空白(Redmine上で直接入力したもの)を取り除いています。
    重複を削除するには、結果の配列をSort-ObjectでソートしさらにパイプラインでGet-Uniqueで重複を取り除きます。そして最後に空白を取り除くためにパイプラインでWhere-Objectへ繋いで {$_} を条件に絞り込んでいます。
    PowerShellでは、空の変数をifなどの条件にするとfalseとなり空でないとtrueとなるので、{$_} と書くだけで空の場合はfalseとなりWhere-Objectでの絞り込みで除外されてくれます。

    if(!$redmine_pids) { $redmine_pids = @(-1) }
    

    この部分はこれで良いのか実は自信がありませんが、空の配列は.Containsメソッドを持たないそうです。後続のコードでのエラー回避のために空の配列の場合は、-1というあり得ない値を一つだけ持った配列に置き換えています。

    プリザンター上のレコードのリスト(2)を作成

    こちらは単純な処理です。
    プリザンターのレコードのリストから先に作成したRedmineへ登録済みのIDに含まれないIDをもつレコードのリストを作っています。
    レコードのリストをWhere-Objectコマンドで絞っているだけの簡単な一行です。

    (2)のレコードをRedmineに登録

    最後、先のリスト(2)を繰り返し処理でRedmineAPIで登録しています。
    今回はデータの登録になるので、RestAPI的にPOSTメソッドになっています。POSTメソッドでのHTTPリクエストは最初にプリザンターのデータを取得したときと変わりません。

    注意点としては、JSON文字列に生の改行が入るとJSONとして解釈されないので、-replace "`n","\n" で改行を置換しています。
    また、何もしないと日本語が化けるのでJSON文字列を $bytes = [Text.Encoding]::UTF8.GetBytes($body) とバイト配列にしています。こうすることで日本語も正しく登録することができました。
    最後に、これは必須ではないですが、Invoke-RestMethodコマンドの結果を > Out-Null で捨てています。こうしないと登録の結果一件ずつが表示されてしまいます(何が登録されたか表示されるのも悪くないので、これは敢えてやらないのも良い選択です)。

    実際のご使用では

    今回はシンプルな例にするため、更新やタイトルと明細しか連携していません。実際にご使用する際にはそれらもいい感じになるように書き足してご使用ください。

    「+読者になる」のお願い

    プリザンターの他、C#によるWebアプリ開発IISの得意とする領域です。今後もプリザンターの機能、拡張スクリプト、ページ追加の研究を進めて行くつもりです。関心のある方、よかったらブログ上部の「+読者になる」をクリックをお願いします!

    最後に

    IISはプリザンターのスクリプトによるカスタマイズの経験が豊富です。
    プリザンター導入に際してカスタマイズをご検討されている方は是非ご相談ください!
    またご不明点やご質問などございましたら弊社までお問い合わせください。