ClearCollect(
Coll_Products,
{
Id: 1,
Title: "Apple",
coll_types: [
{
Id: 1,
color: "Red"
},
{
Id: 2,
color: "Green"
}
]
},
{
Id: 2,
Title: "Grapes",
coll_types: [
{
Id: 1,
color: "Black"
},
{
Id: 2,
color: "Green"
}
]
}
);
Patch(Coll_Products,Lookup(Lookup(Coll_Products,Id=2).coll_types,Id=1),{color:"purple"});
//or
Patch(Coll_Products,Lookup(Lookup(Coll_Products,Id=2).coll_types,Id=1),{color:"purple"});
//or
Patch(Lookup(Coll_Products,Id=2).coll_types.Value,Lookup(Lookup(Coll_Products,Id=2).coll_types,Id=1),{color:"purple"});
我们正在尝试根据ID更新嵌套的集合颜色值,但返回的错误(Patch具有无效的参数)。
所有语句都无法更新嵌套的集合值。
有人可以帮我吗?
答案 0 :(得分:1)
由于在另一个集合的记录中有一个集合,因此需要做一些补丁:从嵌套的集合一直到外部的集合。对于您拥有的集合(并在稍后的答案中查看以实现此方案的更好方法),可以使用以下表达式对其进行修补:
Set(recordToPatch, LookUp(Coll_Products, Id = 2)); // 1
ClearCollect(nestedCollectionToPatch, recordToPatch.coll_types); // 2
Set(nestedRecordToPatch, LookUp(nestedCollectionToPatch, Value.Id = 1)); // 3
Set(patchedNestedRecordValue, Patch(nestedRecordToPatch.Value, { color: "Purple" })); // 4
Set(patchedNestedRecord, Patch(nestedRecordToPatch, { Value: patchedNestedRecordValue })); // 5
Patch(nestedCollectionToPatch, nestedRecordToPatch, patchedNestedRecord); // 6
Patch(Coll_Products, recordToPatch, { coll_types: nestedCollectionToPatch }); // 7
我们可以使用更少的几行,但这比较容易(有点);
Id
属性位于Value
包装器中,因此我们需要首先修补包装的记录请注意,在第3步中,我们必须从Value
属性中解包对象。这是因为当您使用[
... ]
语法创建一个集合时,它等效于一个表,其中包含一个名为Value
的单列。因此,如果我们显示集合的值(例如,使用JSON函数),您将拥有以下内容:
[
{
"Id": 1,
"Title": "Apple",
"coll_types": [
{
"Value": {
"Id": 1,
"color": "Red"
}
},
{
"Value": {
"Id": 2,
"color": "Green"
}
}
]
},
{
"Id": 2,
"Title": "Grapes",
"coll_types": [
{
"Value": {
"Id": 1,
"color": "Black"
}
},
{
"Value": {
"Id": 2,
"color": "Green"
}
}
]
}
]
为简化此结构,可以使用Table函数来防止嵌套集合通过Value属性包装在记录中:
ClearCollect(
Coll_Products2,
{
Id: 1,
Title: "Apple",
coll_types: Table({ Id: 1, color: "Red" }, { Id: 2, color: "Green" })
},
{
Id: 2,
Title: "Grapes",
coll_types: Table({ Id: 1, color: "Black" }, { Id: 2, color: "Green" })
}
)
那等于这个集合:
[
{
"Id": 1,
"Title": "Apple",
"coll_types": [
{
"Id": 1,
"color": "Red"
},
{
"Id": 2,
"color": "Green"
}
]
},
{
"Id": 2,
"Title": "Grapes",
"coll_types": [
{
"Id": 1,
"color": "Purple"
},
{
"Id": 2,
"color": "Green"
}
]
}
]
在嵌套集合中没有包装的对象时,对其进行修补变得更加容易:
Set(recordToPatch2, LookUp(Coll_Products2, Id = 2)); // 1
ClearCollect(nestedCollectionToPatch2, recordToPatch2.coll_types); // 2
Patch(nestedCollectionToPatch2, LookUp(nestedCollectionToPatch2, Id = 1), { color: "Purple" }); // 3
Patch(Coll_Products2, recordToPatch2, { coll_types: nestedCollectionToPatch2 }); // 4
前两个步骤相同。但是我们现在可以在第3步直接修补嵌套的集合,然后在第4步修补外部的集合。
希望这会有所帮助!