ORDA:使用 entitySelection.toCollection() 时如何指定字段顺序?
ORDA: How do I specify field order when using entitySelection.toCollection()?
背景
我正在转换旧的 4D 数据库代码以使用 v17 中引入的新 ORDA 概念。但是,我注意到一个奇怪的地方。当我有一个 entitySelection that I created using ds[$vtTableName].query()
, and I convert that entitySelection to a collection (using .toCollection()
时,我指定的字段顺序不被接受。
示例代码:
C_OBJECT($voSelection)
$voSelection:=ds.Users.query("Active = 'True'")
C_COLLECTION($vcUsers)
$vcUsers:=$voSelection.toCollection("FirstName, LastName, DTLastSignin")
预期输出
我希望 $vcUsers
是对象的集合,并且每个对象看起来像:
{ "FirstName" : "John", "LastName" : "Smith", "DTLastSignin" : "2019-10-12T32:23:00" }
实际输出
相反,我收到了不同的订单:
{ "DTLastSignin" : "2019-10-12T32:23:00", "FirstName" : "John", "LastName" : "Smith" }
这已经破坏了我的一些 API 消费者,因为他们希望能够指定字段顺序,这是旧方法 (Selection to JSON) 所尊重的。但是,toCollection()
似乎没有。
我找不到任何类型的关于字段顺序的文档,甚至找不到。 official documentation 显示了遵守顺序的字段,但这可能只是巧合。
答案是不能,因为 toCollection()
字段列表只是一个过滤器。在引擎盖下,实体的属性按其自然顺序循环,并过滤该字段是否为指定的过滤字段之一。
这就是 .toCollection
比经典 Selection to JSON
方法更快的原因。
解决这个问题的一种方法可能是使用 .map()
函数。但是,这可能会降低性能。我没有做过任何分析,所以我不确定。
背景
我正在转换旧的 4D 数据库代码以使用 v17 中引入的新 ORDA 概念。但是,我注意到一个奇怪的地方。当我有一个 entitySelection that I created using ds[$vtTableName].query()
, and I convert that entitySelection to a collection (using .toCollection()
时,我指定的字段顺序不被接受。
示例代码:
C_OBJECT($voSelection)
$voSelection:=ds.Users.query("Active = 'True'")
C_COLLECTION($vcUsers)
$vcUsers:=$voSelection.toCollection("FirstName, LastName, DTLastSignin")
预期输出
我希望 $vcUsers
是对象的集合,并且每个对象看起来像:
{ "FirstName" : "John", "LastName" : "Smith", "DTLastSignin" : "2019-10-12T32:23:00" }
实际输出
相反,我收到了不同的订单:
{ "DTLastSignin" : "2019-10-12T32:23:00", "FirstName" : "John", "LastName" : "Smith" }
这已经破坏了我的一些 API 消费者,因为他们希望能够指定字段顺序,这是旧方法 (Selection to JSON) 所尊重的。但是,toCollection()
似乎没有。
我找不到任何类型的关于字段顺序的文档,甚至找不到。 official documentation 显示了遵守顺序的字段,但这可能只是巧合。
答案是不能,因为 toCollection()
字段列表只是一个过滤器。在引擎盖下,实体的属性按其自然顺序循环,并过滤该字段是否为指定的过滤字段之一。
这就是 .toCollection
比经典 Selection to JSON
方法更快的原因。
解决这个问题的一种方法可能是使用 .map()
函数。但是,这可能会降低性能。我没有做过任何分析,所以我不确定。