ボタン押下時に
ListShifterKWを使用してループ処理をしています。
ループ処理では以下の処理を実行しています。
1.JavaScriptを呼び、各行の開始予定日の日付を計算
2.1で計算された開始予定日をDBに更新
JavaScriptでアラートを出したところ
各行の開始予定日の値は正しく取得できていました。
(JavaScript内の処理:
ヘッダの〆切日付から、各行の工数分を逆算して開始予定日を計算
この際にHolidayListテーブルに登録されている日程は省く)
その結果、開始予定日は図1のようになります。
図1 画面
しかしながらDBを確認すると
図2のようになっていて、1行ズレた状態で更新されています。
図2 DB
ワークフローのMake changesが怪しいと思ったんですが
なかなかこの件が解決できずにいます。。
図3 ワークフローのMake changes
JavaScriptの処理の終了は待つように設定しているのと
更新処理の前にポーズとかも入れてみましたが、変わらずです。(T_T)
似たような事象に悩まれた方いらっしゃいましたら
解決方法をご教示いただけたら幸いです。
よろしくお願いいたします。
micco
2
直接的な回答ではないので申し訳ないのですが、
ListShifterKWを使用してMake changesを同条件にした際、
行ズレ無く変更できました。(予定日に入る内容はOption setsのデータ)
Javascript側とのタイミング等の問題もあるかなと思ったので、DB書き込み前に
予定日に入る内容が何になっているか確認してみるのも手かと思います。
「いいね!」 3
開始予定日を更新する際にズレているのですね。
:item # で指定してるインデックス(要素の番号)がおかしくありませんか?
ListShifterの設定が分からないので外しているかもしれませんが、Number型のリストを使っているのであれば、Start atが0になっているなどです。
カラムを追加して、インデックスの値「This ListShifterKW’s Current Iteration Index」をDBに入れてみて、どこがおかしいか切り分けてみてはいかがでしょう。
indexではなくタスクコードを指定して更新できればいいのですが・・・。
「いいね!」 4
みっこーさん、jansnapさん
アドバイス頂きありがとうございます!
DB書き込み前に
indexの値やタスクコードを表示するようにしてみました。
1.まずはListShifterの設定がこちらです。
開始は1になっていて、1ずつステップアップするような設定です。
2.画面にindex、タスクコード、開始予定日、ユニークIDを表示
RepeatingGroup:優先順位の昇順で表示
ListShifter:優先順位の降順でループ
となっているので、indexやタスクコード等が逆順になっていないか?も念のため確認しましたがこちらは問題なさそう…
3.DB更新時にindexの値も更新するようにしました
4.実行画面
画面真ん中のアラートは次の行の情報が入っているので無視して頂いて大丈夫だと思うのですが
INDEXの値、タスクコード、開始予定日、ユニークIDは問題なさそうです。
しかし、更新後にDBを確認したところ
カラムINDEX2のところに、カラムINDEX1の開始予定日が登録されていました。謎…
JavaScriptを使用せずに更新していた際は行のズレもなく更新できていたのですが
今回日付の計算が少しややこしかったので
ループ処理の中でループ処理を行いたくJavaScriptを使用したところ
なんだかよく分からない動きをするようになってしまいました。。
DB更新前のポーズもなくすと
画面に表示される開始日付の値もおかしくなってしまうので
JavaScriptとのタイミングの問題はあるのかもしれません。
(そんなに重い処理ではないはずですが… )
JavaScriptを介さずに日付の計算を行う方法がないかもう一度考えてみます。
いろいろとアドバイス頂きありがとうございました!
indexの確認方法など今後の参考になるものも多く、大変ありがたかったです^^
micco
5
DB更新内容の挙動が謎すぎますね
Javascriptを使わない方法としてのあくまで仮説ですが、
①RepeatingGroupの:last Itemは〆切り日からタスク工数を引く
②その他(first item ~ last item-1)は優先順位一つ下の日付からタスク工数を引く
③上記①、②をInputエレメント等でRepeatingGroupに配置して計算
④自動逆算ボタン押下で上記③のエレメント値を反映
できるか分からないですけど参考になれば幸いです。
「いいね!」 1
荒業っぽいですがなんとか解決できたので
ざっくりになりますが、解決法を書いておきます。
(※動作があまり早くないので、他の方法があればそっちの方がいいと思います…)
1.JavaScriptのTrigger eventをON
2.ListShifterのIterate処理でRun JavaScriptして開始予定日を取得
3.JavaScriptのTrigger eventで
2で取得した開始予定日とユニークIDをワークにつっこむ
4.ListShifter Iteration Complete
ワークのデータを本テーブルにまとめて更新
ワーク削除
「いいね!」 1
みっこーさん、ありがとうございます!
返信のタイミングが思いきりかぶってしまいました
JavaScriptを使わない方法を考えてくださってありがとうございます!!
ここ1週間ほど、この更新行がズレる現象で悩んでいたので(笑)
気にかけて頂いてとても助かりました!
ありがとうございました^^
「いいね!」 2
micco
8
解決したようで良かったです
一週間も奮闘されてたんですね、凄いです
こちらこそJavascript使って処理する知見学べたのでありがとうございます。
お疲れさまでした!
「いいね!」 2