EL式のエラー「The array has '1' elements, index '1' is invalid」

コメント

5件のコメント

  • Avatar
    品川 武志

    無理やりですが、一時対応できました。

    #{(#q_text25+",a,b,c,d,e,f,g,h,i,j,k")?.split(",")[1]}

    というようにカンマ区切りの固定文字列を後ろにくっつけたらエラーは消えました。

    本当の解決方法を知りたいです。

    0
    コメントアクション パーマリンク
  • Avatar
    Questetra Support

    配列要素の参照の書き方に誤りがある訳ではないのですが、入力文字列(#q_text25)に「,(カンマ)」が含まれてない場合、「1」で指定された配列要素は存在しませんので式エラーとなってしまっております。
    (内部的にはランダムな文字列を生成して式評価が行われます。想定している入力文字列では問題なく動作する場合であっても、設定時のチェックでエラーとなってしまうことがございます。)

    > #{(#q_text25+",a,b,c,d,e,f,g,h,i,j,k")?.split(",")[1]}

    「無理やり」の方法もひとつの対応策となりますが、別の対応策としては、null 判定に加え配列長判定も行う方法がございます。

    #{#q_text25 != null and #q_text25.split(",").length > 1 ? #q_text25.split(",")[1] : ""}

    もしくは

    #{#q_text25?.split(",")?.length > 1 ? #q_text25.split(",")[1] : ""}
    0
    コメントアクション パーマリンク
  • Avatar
    品川 武志

    回答ありがとうございます。「ランダムな文字列を生成して式評価が行われます」という事を初めて知りました。エラーの理由が理解できました。

    実物はこのようになっています。

    提案いただいた式ですと、数値を2か所を変えなければならずちょっと手間がかかると思いました。

    #{#q_text25?.split(",")?.length > 1 ? #q_text25.split(",")[1] : ""}

    なので、今のまま行こうと思っています。

    余談ですが、下記の式はエラーチェックを通過できます。選択肢型は別のチェックをしているからでしょうか。

    #{#q_select == null ? "" : #q_select?.get(0)?.getValue().split(",")[0]}
    0
    コメントアクション パーマリンク
  • Avatar
    Hirotaka NISHI (Questetra Support)

    開発チームに確認しましたが、データ型によってチェックの方法は異なるようです。
    (内部実装に関わる部分ですので、細かい仕様は公開されておりません。また、今後変更(改良)される可能性もございます。)

     

    他の方もメンテナンスできるよう、[スクリプトタスク]は利用しない方法で実現しているのだと推測致します。ただ、更新対象の項目が多く、類似コードを何度も記載するのであれば、[スクリプトタスク]を利用するのも良いのかな、と思ったりもします。
    EL 式で頑張るか、スクリプトで記述するか、なかなか難しいところですね。

    0
    コメントアクション パーマリンク
  • Avatar
    品川 武志

    色々と情報をありがとうございます。

    おっしゃる通り、データ更新タスクでしたらエクセル関数の延長程度の知識でメンテナンスできると思い、極力スクリプトタスクは使用しないように考えています。

    最近は私ばかりコミュニティを占領しているような気がして申し訳ないですが、とても有益な情報をいただき感謝しております。今後ともよろしくお願いいたします。

    0
    コメントアクション パーマリンク

サインインしてコメントを残してください。