Implem / Implem.Pleasanter

Pleasanter is a no-code/low-code development platform that runs on .NET. You can quickly create business applications with simple operations.
https://pleasanter.org
GNU Affero General Public License v3.0
511 stars 81 forks source link

サーバスクリプト items.Get() で該当するレコード数より多くのオブジェクトが返される #503

Closed tomohisajp closed 6 months ago

tomohisajp commented 7 months ago

事象

サーバスクリプトでテーブル100から自分が本日作成したレコードを取得するコードを記述しました。 items.Get()から取得したオブジェクト数を確認すると、レコードが無いときは0でなく24、レコードが1件在るときは25、2件在るときは26が返りました。オブジェクトのKeyを確認すると期待するレコード以外のものがくっついているようです。 検証したPlesanterのバージョンは1.3.47.0です。

検証したコード

// 検索条件 自分,本日作成したレコード
let criteria = {
  "View": {
    "ColumnFilterHash": {
      "Creator": "[\"Own\"]",
      "CreatedTime": "[\"2023/12/01 00:00:00,2023/12/01 23:59:59\"]"
    }
  }
};
let records = items.Get(100, JSON.stringify(criteria));

// 確認用 取得したオブジェクト数とオブジェクトのKeyを表示する
context.Log(Object.keys(records).length);
let keys = Object.keys(records);
for (let key of keys) {
  context.Log(key);
}

実行結果のサンプル(該当するデータが2件在るとき)

26
0
1
Get
Set
Address
CopyTo
GetEnumerator
GetLength
GetUpperBound
GetLowerBound
Initialize
GetValue
SetValue
GetLongLength
Clone
GetType
ToString
Equals
GetHashCode
Length
LongLength
Rank
SyncRoot
IsReadOnly
IsFixedSize
IsSynchronized
nagamune-implem commented 6 months ago

Issueありがとうございます。

コード確認いたしました。 items.Get()はArray型を返しますので、下記のようなコードで意図した動作になるかと思います。

書き換えたコード

// 検索条件 自分,本日作成したレコード
let criteria = {
  "View": {
    "ColumnFilterHash": {
      "Creator": "[\"Own\"]",
      "CreatedTime": "[\"2023/12/01 00:00:00,2023/12/01 23:59:59\"]"
    }
  }
};
let records = items.Get(100, JSON.stringify(criteria));

// 確認用 取得したオブジェクト数とオブジェクトのResultIdとTitleを表示する
context.Log(records.Length);
for (const r of records) {
  context.Log(`${r.ResultId} ${r.Title}`);
}

上記で試して頂きますようよろしくお願いいたします。

tomohisajp commented 6 months ago

動作しました。

Arrayインスタンスの配列の要素数は、JavaScriptではlengthプロパティ、サーバスクリプトのClearScriptでは(Lが大文字)Lengthプロパティでした。records.lengthで要素数を取得できなかっため、recordsに含まれるkeysを数えましたがそれは異なる結果を招きました。 以下、情報を共有します。

ITypedArray Interface@ClearScript https://microsoft.github.io/ClearScript/Reference/html/T_Microsoft_ClearScript_JavaScript_ITypedArray_1.htm

Array: length@Mozilla JavaScript https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/length

nagamune-implem commented 6 months ago

ご確認・情報共有ありがとうございます。 解決したようでしたら、お手数をおかけして申し訳ございませんが「Close」して頂ければと思います。 他に何か本件に関する課題がございましたらご連絡いただければと思います。