How to sort the date and time /日時のソートの仕方

a_129
Mega Guru

現在、フローデザイナーで、日時をソートするアクションを作成しています。

やりたいこととしては、複数レコードを入力値とし、日時の昇順に並べ替え、配列で出力したいと考えています。

以下、自身で書いてみましたが、上手くいかないためご教授いただければ幸いです。

 

(function execute(inputs, outputs) {
  var asc_array = [];
  while (inputs.asset_records.next()) {
    var array = [];
    array[0] = inputs.asset_records.getValue("u_assign");
    array[1] = inputs.asset_records.getValue("u_model");
    array[2] = inputs.asset_records.getValue("u_work_start");
    array[3] = inputs.asset_records.getValue("u_work_end");
    array[4] = inputs.asset_records.getValue("u_parent");
    asc_array.push(array);    
  }
   asc_array.sort(function(a, b){
	outputs.asc_array = (a > b ? 1 : -1);}
})(inputs, outputs);
1 件の受理された解決策

Hitoshi Ozawa
Giga Sage
Giga Sage

aさん、

具体的にどのフィールドでソートするのでしょうか?u_work_startでしょうか?

日付の場合は形式を重要です。例えた形式がmm/dd/yyyyやdd/mm/yyyyでは直接の値でソートしても正しくなりません。列の型がDateなのかDate/Timeであるのかも関係します。

なお、レコードを取得する時に予めてソートしておくのはどうでしょうか?

元の投稿で解決策を見る

6件の返信6

フローデザイナーを利用してレコードを更新する場合はアクションで行うよりも、「各」ステップで当該レコードを取得して、「レコードを更新」することもできます。

アクションを利用してスクリプトを実行するのであれば最初からビジネスルールやスケジュールジョブでスクリプトで書いた方がよいです。

var gr = new GlideRecord('<処理するテーブル名>');
gr.addActiveQuery();
gr.addQuery('<フィールド名>', '<条件>', '<値>');  // 条件を設定
gr.orderBy('「作業開始時間」');
gr.query();
var indx = 1;
while(gr.next()) {
  gr.<「優先順位」フィールド名> =  indx;
  indx++;
  gr.update();
}

 

最後になりますが、一つを質問に別の質問をするのは避けてください。一つのスレッドに複数の質問があると複数の正解があることになります。他参加者から文句を言われることになります。

ご回答ありがとうございます。

とても参考になりました。

 

>最後になりますが、一つを質問に別の質問をするのは避けてください。一つのスレッドに複数の質>問があると複数の正解があることになります。他参加者から文句を言われることになります。

申し訳ございません。以後、改めます。