おぼえがき

おぼえがき、独り言、etc...

ASTERIA Warpを使って感じたあれこれ

ASTERIAを使ってみて感じたあれこれ

ってのを記念に残しておこうかななんて

そもそもASTERIA Warpって何?

に関しては、公式みたほうが早そう
ノーコードで開発ができるから構築期間短縮出来るよってある。
けど、モノと条件と複雑さによる。絶対そう。


コンポーネント(部品)をおいて、それらを矢印で繋げてやればOK~簡単!
誰でも出来るね!というノリだろうけど別にそういうわけじゃない。

 

まあそんな恨み節たらたらなことはさておき、そんな動作するのかよと思ったところをいくつか覚書

 

きみそんな動きするの?集

ループ(LoopStart,LoopEndコンポーネント etc)

繰り返し処理を行うには – ASTERIA Warp サポートサイト-ADN

Javaなんかで拡張for文を使うノリで使用すると痛い目を見るやつ。
ループ処理を行いたいとき、ASTERIA Warpはループ開始時のレコード(ストリーム)の件数が0件でも必ず1回ループする。

これの何がまずいって、DBを検索した結果の件数分ループなんかを行いたいときに、
必ず空のレコードが1つ作成されるという点。(マッピングすればの話)

マッピングをしなければまあ問題はないんだけど、DB取得結果をマッピングしないなんて、何の為にデータを取得したのか分からないので、基本ありえないと思う。

 

■回避方法

  • ループ前に件数を判定する。
    Javaで例えると、以下の動きをさせる。
  1. DBからデータを取得
  2. 取得件数を判定
  3. 取得件数が1件以上の場合ループ

なんでこんな面倒なことせないかんねん。
Javaならfor文だけで事足りるのに、if文とfor文を使うみたいな動きさせないといけない。

 

空のレコードが1件出来上がってしまう原因としては、以下の2つがある。

  1. 0件でもループ内の処理が1回通ってしまうこと
  2. マッピングを行ってしまうこと

データのマッピングを行うには – ASTERIA Warp サポートサイト-ADN

マッピングについては上のリンク参照
フロー変数に代入するだけとかならいいんだけど、
入力ストリーム(今回の例の場合DBから取得したデータの各項目値)から
出力ストリーム(編集後の値)へのマッピングを行ってしまうと、
空のレコードに対して上記のマッピング処理が行われ、1件存在する扱いとなってしまう。


レイヤー条件を設定すると回避できる件は、

とっても便利!「条件付レイヤー」機能を使ってみた ~菊ちゃんのASTERIA体験記~| ASTERIA Warp 製品ブログ|アステリア

ここらへんの情報を頭に入れていただいた上で、レイヤー条件に以下を設定する。

「$stream.RecordCount>0

これで、入力ストリームの件数が0件以上のときにはマッピングを行うことになるので、空のレコードが作成されなくなる。

ちなみにこの回避法の場合、レコードが増えてほしくないところまでひたすら上記のレイヤー条件を付けないといけないので、1つ目の回避方法使ったほうが無難な気もする。

 

サブフローのフロー変数

1回の実行で複数回同じサブフローが呼ばれる場合、
かつフロー変数をマッピング初期化してない場合の話

フロー変数ってのは初期値が設定できる。
なので、サブフローが呼ばれるたびに初期化されているものだと思っていたけど、
1回の実行で設定したフロー変数はずっと保持しているらしい。

フロー変数の初期化は絶対にフローの最初でマッピングやろうねという話。
逆に言えば、複数回呼ばれても同じ値を参照したい場合なんかは(そんな場合あるのか?)初期化処理を入れなければいいという話。

ループ内で実行されるサブフローでフロー変数の初期値が使用されないことがあります – ASTERIA Warp サポートサイト-ADN

記事あったんだ。知らなかった。

 

ループ中のbreak、及びLoopEndのストリームをまとめる

なんかあった気がするけどなんだったっけ

ループ中にbreakを配置している場合、かつループした全件がbreakを通った場合、
かつ、LoopEndのプロパティで「ストリームをまとめる」としていた場合、
全てbreakのためストリームの件数が0件となってほしいが、ループ開始時と全く同じストリームが取れてくるんだったかな…。

あまりにもよく分からない動きだったのでうろ覚え

ループ中にbreak使う処理があるときは気をつけたほうが良い。(思い出したら追記)

定数(外部変数セット)の注意点

外部変数セット自体の命名を変える場合

外部変数セットの内容を変更したらフローがエラーになってしまいました – ASTERIA Warp サポートサイト-ADN

上記リンクは、多分外部変数セット自体の名前を変えたらエラーになったよだと思う。
そりゃそう。もっかい外部変数セット配置してください。
というかこの件に関しては、外部変数セットだけの話ではない。
関数とかそこらへんも名前変えると全部エラーになる。
配置済のものが変わってくれるなんてことはない。命名は慎重にやろう。本当に。

 

外部変数セットの中の特定の変数名を変更した場合

先に結論を言うと、レイヤー条件で使用している場合は気をつけろ。以上。

レイヤー条件以外での使用箇所(マッピング等)は、変数名が変わっても大体なんとかしてくれるが、レイヤー条件の使用箇所はなんとかしてくれない。

条件付きレイヤーのコンテンツページ

上記にもある通り、外部変数セットの値は「$exvar.<外部変数セット名>.<変数名>」で使用することができる。ここが変わらない。

こいつの何がやっかいかというと、外部変数セットの変数名を変えたことで、存在しない変数名となっても、コンパイルが通ってしまうこと。

は?

変更前に参照箇所を確認して、ちゃんと修正すること。

システム変数のフロー内の参照・設定位置のコンテンツページ

画像付きのページがないか探したけどなかった。参照箇所の確認方法は上記リンク参照

 

CSV形式で編集で半角スペースが消える

フィールド定義を編集するには – ASTERIA Warp サポートサイト-ADN

上記のリンクでは、ストリームの項目をCSV形式で編集することが出来る紹介がされているが、これは外部変数セットでも出来る。

例えば、外部変数セットに「半角スペース」という変数があり、その値に「" "(半角スペース1桁)」が設定されていたとする。

上記の設定がされている状態で「CSV形式で編集」とすると、
多分「半角スペース,String, 」みたいな状態で表示される気がする。
この時点ではまだ半角スペースが存在するが、CSV形式で編集のOKだかのボタンを押下し、編集を終了すると、勝手にトリム処理が行われて半角スペースが消える

余計なお世話すぎる

ちなみに本件も外部変数セットだけに限った話ではない。

Table

こちらマッパー関数のTableくん。

Properties形式は「キー=値」の形式でファイルから値を取得できる子。
こいつも半角スペースは勝手にトリムする。
前についていようが後ろについていようがトリムする。
前についている場合だとエスケープが効くので、半角スペースありの状態にできる。
例)
「code= 12345」の場合「code=\ 12345」とすると、
codeをキーに値を取得した際、「 12345」(先頭半角スペースあり)で取得できる。
ちなみに前者の設定の場合「12345」(先頭半角スペースなし)が取得される。

 

他参考リンク

help.asteria.com

ヘルプとぼくはマブダチってくらいお世話になる。
フローの流れとかは有識者に聞いた方がいいが、
コンポーネントの使い方とかは有識者に聞くよりも手っ取り早い。

【spring】サンプルページその2(入出力画面とか)

おぼえがき。

tirimen00.hatenablog.com↑の続き。

とりあえず試しにトップページ作る。

f:id:tirimen00:20200709225342p:plain

f:id:tirimen00:20200709225401p:plain

動いた。

cタグ使えてる理由は、共通jsp読み込みしてるため。

jspって拡張子のファイル読み込む時(url-pattern)は

jspの先頭に「include.jsp」をincludeする(include-prelude)って言ってる。なるほどなあ

f:id:tirimen00:20200709225534p:plain

 

ログイン画面とメニュー画面作る(ハリボテ、ただのinput/output画面)

f:id:tirimen00:20200709231959p:plain


f:id:tirimen00:20200709232033p:plain

f:id:tirimen00:20200709232053p:plain

動いた。いや怖、どんな画面だ
タイトルも変え忘れてるやん

 

それぞれの解説とか

 

LoginController.java


 
    @RequestMapping("login")

前回同様。先頭スラッシュなくてもSpringが勝手に足してくれるっぽい。

value = "/login"」みたいな形式でも書ける。
(path = でも良い。は?パターン多いと逆に困る)
他にオプションつけたい時はこっち

 

LoginController.java


 
    @RequestMapping(method = RequestMethod.GET)
    @RequestMapping(method = RequestMethod.POST)

ServletのdoGet,doPostみたいなもん。
GETだったらこっち、POSTだったらこっちって教えてあげる

Spring Framework 4.3から、以下の略記述でも書けるようになった。楽


 
    @GetMapping()
    @PostMapping()

 

ちなみに調子乗ってGET省略したら

f:id:tirimen00:20200709235118p:plain

f:id:tirimen00:20200709233523p:plain

いやそりゃあね。ごめんなさい。

じゃあPOST省略したら?と思って試したけど、↑のPOST版だった。いやそりゃあね。

 

LoginController.java


 
    public String init(Model model) {

いやModelて何?
Springが用意するMapオブジェクトで、Viewに渡すオブジェクトを設定してくれるらしい。へえ~

 

LoginController.java


 
    LoginForm form = new LoginForm();
    model.addAttribute(form);

んでそのmodelに、これから遷移するlogin.jspに記述があるLoginFormを渡してやる。なるほど?

この記述を

f:id:tirimen00:20200709235834p:plain

ガッツリ変えて、

f:id:tirimen00:20200709235914p:plain

TestFormって名前で参照できるようにした。

 

LoginController.java


 
    @ModelAttribute("TestForm")

 このアノテーションがついているメソッドは、RequestMappingアノテーションがついているメソッドの実行前に必ず呼ばれるらしい。

ついでに戻り値が勝手にmodelに追加されるので、
わざわざmodel.setAttributeをしなくてよくなりました。

 

ちなみにjsp側の記述については以下の通り。

  • form:formタグはオプション省略するとPOSTがデフォルト
  • modelAttributeにはフォームオブジェクトの名前を指定。
    ↑のTestFormみたいに名前を自力で設定しない場合、先頭小文字のクラス名になる
    (だから最初のソースは"loginForm"となっている)

 

 

参考にしたサイト(ありがとうございました)

Spring MVC で簡単そうなエコーアプリを作って基本を学ぶ - ponsuke_tarou’s blog

【spring】導入~サンプルページまで

おぼえがき。

 

とりあえず導入まで

  • 参考サイトを元に、Eclipseを導入。

 検索に出てこなかったのでURL直打ち

 ヘルプ>新規ソフトウェアのインストール

 「http://dist.springsource.com/release/TOOLS/update/e4.8」入力

 →コア/Spring IDEにチェックしてインストール

  • pom.xmlの設定をいじる。

設定いじってもエラーが出たので、以下の手順で解決。

①プロジェクト右クリック

Maven>プロジェクトの更新をクリック

 

プロジェクトを作成すると、勝手に「HomeController.java」「home.jsp」が生成されているため、Tomcat起動してURLアクセス

f:id:tirimen00:20200709222037p:plain

動く。

 

コンテキストルートはどこで設定してるのか?

①プロジェクトを右クリック

②プロパティー>Web プロジェクトの設定f:id:tirimen00:20200709222928p:plain

 

なんで↑のURLでhome.jspが表示されるのか?

HomeController.java


    @RequestMapping(value = "/", method = RequestMethod.GET)

ここで、コンテキストルートだったらhome表示してね、と言っている。

f:id:tirimen00:20200709223115p:plain

 

試しに以下のように記述を変えると、今度は「http://localhost:8080/pack/test」でアクセスが可能になる。


    @RequestMapping(value = "/test", method = RequestMethod.GET)

おわり。

 

参考にしたサイト(ありがとうございました)

Java10 + Spring MVC + MyBatis の環境構築

Apache Tilesの設定、共通レイアウトの作成あたりは省略。

小数点以下のフォーマットを整える

おぼえがき。

小数点以下の値をフォーマットして表示する。

 

ソースは以下。


 
    Dim formatVal As String = inputVal.ToString("0.00")

これに関しては、小数点以下が1桁であっても2桁目まで出るよというもの。

例)

 123.1→123.10

 100→100.00

 123.654→123.65(小数点第3位で四捨五入される)

 123.655→123.66(同上)

 

他にもフォーマット指定することで、簡単に¥マーク付与や3桁ごとのカンマとかが簡単につけられるっぽい。

 

参考にしたサイト(ありがとうございました)

書式を指定して数値を文字列に変換する - .NET Tips (VB.NET,C#...)

土日の日付部分のみを取得する

おぼえがき。

土日の日数を取得する。

 

ソースは以下。


 
    Private Function GetHoliday(ByVal y As Integer, ByVal m As Integer) As List(Of String)

        ' 土日リスト
        Dim HolidayList As New List(Of String)()

        ' 引数で渡された年月の月初日付
        Dim day As DateTime = New DateTime(y, m, 1)

        ' 月が変わるまで繰り返す
        While day.Month = m
            ' 曜日判定
            If day.DayOfWeek = DayOfWeek.Sunday Or day.DayOfWeek = DayOfWeek.Saturday Then
                ' リストに追加する
                HolidayList.Add(day.Date.ToString("dd"))
            End If
            ' 次の日へ
            day = day.AddDays(1)
        End While

        Return HolidayList
    End Function

実際に使用するときはこんな感じ。


 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim yyyyMM As String = "2019/11"

        Dim yearMonthList As Integer() = Array.ConvertAll(Of String, Integer)(Split(yyyyMM, "/", -1), AddressOf Integer.Parse)

        Dim testList As List(Of String) = GetHoliday(yearMonthList(0), yearMonthList(1))

        ' 祝日を追加
        testList.Add("04")

        For Each test In testList
            Label1.Text = Label1.Text & test & vbCrLf
        Next
    End Sub

参考にしたサイト(ありがとうございました)

指定した月から特定の曜日の日付を取得するには?[C#、VB] - @IT

Chartコントロールの使い方(円グラフ)

仕事(?)で使うことになりそうなので、おぼえがき。

ツールボックスから、Chartをフォーム上にドラッグ&ドロップ。

f:id:tirimen00:20190923203812p:plain

ソースは以下。


 
     Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        ' 初期化
        Chart1.Series.Clear()

        ' データの取得
        Dim ds As DataSet = GetDataSet()

        ' Chartコントロールにデータソースを設定
        Chart1.DataSource = ds

        ' Chartコントロールにタイトルを設定
        Chart1.Titles.Add("タイトル設定")

        ' グラフの種類,系列,軸の設定
        ' 列名の取得
        ' Dim columnName As String = "値"
        Dim columnName As String = ds.Tables(0).Columns(1).ColumnName

        ' 系列の設定
        Chart1.Series.Add(columnName)

        'グラフの種類を円グラフに設定
        Chart1.Series(columnName).ChartType = SeriesChartType.Pie
        '真上から描画
        Chart1.Series(columnName).CustomProperties = "PieStartAngle=270"
        '凡例の表示内容設定
        Chart1.Series(columnName).LegendText = "#VALX #VAL%"

        'X軸のデータソース設定
        Chart1.Series(columnName).XValueMember = ds.Tables(0).Columns(0).ColumnName.ToString

        'Y軸のデータソース設定
        Chart1.Series(columnName).YValueMembers = columnName

        Chart1.DataBind()
    End Sub

    ' データの設定
    Private Function GetDataSet() As DataSet
        Dim ds As New DataSet
        Dim dt As New DataTable
        Dim dtRow As DataRow

        '列の作成
        dt.Columns.Add("区分名", Type.GetType("System.String"))
        dt.Columns.Add("値", Type.GetType("System.Int32"))
        ds.Tables.Add(dt)

        'データの追加
        dtRow = ds.Tables(0).NewRow
        dtRow(0) = "丸々区分"
        dtRow(1) = "40"
        ds.Tables(0).Rows.Add(dtRow)

        dtRow = ds.Tables(0).NewRow
        dtRow(0) = "バツ区分"
        dtRow(1) = "25"
        ds.Tables(0).Rows.Add(dtRow)

        dtRow = ds.Tables(0).NewRow
        dtRow(0) = "その他"
        dtRow(1) = "35"
        ds.Tables(0).Rows.Add(dtRow)

        Return (ds)
    End Function

データテーブルに追加した順で表示されるため、昇順・降順に並べ替えたい場合は、
データテーブル追加のタイミングで実施すること。(私が知らないだけで設定があるかもしれないが)

設定値の話。CustomPropertiesのPieStartAngleで、円グラフがどこから描画されるかを指定できる。
今回270を設定しているが、デフォルトが90度の位置のため、270を設定してやることで真上から描画される。

  • 実行後イメージ

f:id:tirimen00:20190923204521p:plain

参考にしたサイト(ありがとうございました)

[ASP.NET]チャート・コントロールで円グラフ/ドーナツ・グラフを作成するには?[3.5、C#、VB] - @IT

[ASP.NET]チャート・コントロールに凡例を追加するには?[3.5、C#、VB] - @IT