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

    JXUGC #25 最新情報アップデート&LT 大会で当社エンジニアが登壇しました

    IISの石崎です。
    Japan Xamarin Users GroupのJXUGC #25 最新情報アップデート&LT 大会でIISの石崎が登壇しました。

    JXUGC #25 最新情報アップデート&LT 大会」とは?

    Build 2019 の少し後に Xamarin.Forms 4.0 が発表になり、結構大きな追加機能(Shell など)が入りました。このところハンズオンやもくもく会が多かったので、いわゆる普通の JXUG はしばらくやっていませんでした。その間にこんなアプリ/ライブラリを作ったよ。とか、こんなハマりどころをこうやって回避したよ。とか共有したいことも溜まってきたのではないでしょうか?

    Flutter、React Native、Kotlin Native とライバルも多いので、使い分けとかもしたいですよね。

    40分のセッションと 5分の LT で喋ってくださる方を募集しますので、ぜひご参加ください。

    引用元: https://jxug.connpass.com/event/138707/

    おやつ&コミュニケーションの様子

    今回のイベントは おやつ&コミュニケーション を設ける試みがあったことも特徴の一つでした。
    平日夜のイベントでよく見かけるピザや寿司はなくおやつなことも特徴です。

    イベントの主食のドーナツ

    f:id:imageinformationsystem:20190902115610j:plain

    イベントではあまり見ないケーキも

    f:id:imageinformationsystem:20190902115619j:plain

    参考情報: https://prtimes.jp/main/html/rd/p/000000018.000031300.html

    登壇の様子

    ARCore で遊ぼう」というタイトルで登壇するIISの石崎。

    f:id:imageinformationsystem:20190902115632j:plain

    最後に 

    IISではXamarinによるモバイルアプリ開発に力を入れています。Xamarinに関心のある方、ぜひ一度IISへ遊びに来てください。 また、IISでは社員の登壇など技術コミュニティへの貢献を推奨しています。IIS主催のイベントも多数行っていますので是非遊びに来てください。

    週刊プリザンター第36号

    こんにちは。IISの田口です。
    先週末は弊社主催の勉強会を開催しました。かなり駆け足の説明になってしまい、教えることの難しさを改めて感じさせられました。
    勉強会終了後に皆さんにお願いしたアンケートも多くの方から記入して頂きました。 誠にありがとうございます。
    アンケート結果を踏まえて、今後も皆さんのお役に立てるような内容を発信していきたいと思います。

    週刊プリザンター第36号です。
    8/19~8/25を追いかけます。

    今週は・・・

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

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

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

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

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

    最後に  

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

    週刊プリザンター第35号

    こんにちは。IISの田口です。
    関東はお盆過ぎたら若干涼しくなった気がします。といっても30℃を超えるんですが。
    猛暑が当たり前になってきてる気がします。

    週刊プリザンター第35号です。
    8/13~8/18を追いかけます。

    今週は・・・

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

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

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

    注目のプリザンター関連イベント

    弊社主催の勉強会「プリザンター・マニアックス #7【拡張SQL・アクセス制御を使いこなそう】 」

    以前よりconnpassで告知しています通り、8/23(金)に勉強会を開催します。
    おかげさまでキャンセル待ちとなっております。今回のお題は皆さんの注目度が高いことを改めて実感しています。

    pleasanter.connpass.com

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

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

    最後に  

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

    週刊プリザンター第34号

    こんにちは。IISの田口です。
    皆さん夏休みはもう取りましたか?
    相変わらず暑いので、水分補給をこまめにして熱中症に気をつけましょう。

    週刊プリザンター第34号です。
    8/5~8/12を追いかけます。

    今週は・・・

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

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

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

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

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

    最後に  

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