本文介绍了有没有办法克隆代码中的多个实体(记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
注意:目前我在此项目上遇到了2sxc v9.43.2。
从我的内容类型中选择一组记录后,我需要能够复制它们,同时更改其中一个字段。这是我到目前为止几乎奏效的想法。用例很简单,他们有程序,人们可以注册。它们每个季节都会改变,但只是很小的变化(价格、日期/时间等)。当他们编辑下一季的时候,他们需要本季的直播和保持不变。因此,我们仍处于秋季(EntiyID 1732),有97个活动项目。我们希望单击一个按钮并按原样克隆所有97个节目,但要插入到新的下一季(下一季1735)。
两个问题:
- 如果以这种方式工作,在
fields.Add()
行 中需要传递";对象";的ent/属性上使用什么语法?
- 有没有其他2sxc方法可以做到这一点?是App.Data.Create()方法的其他变体还是API中的其他方法?我只需要复制1个字段(赛季)更改的记录?
- 在最新版本的2sxc v11.7+中是否有更好的方法来实现这一点?
// we are going to duplicate the current Season's programs in to the new season
// cheating for now, pre-made new 1735 in Seasons, current is 1732
var programs = AsDynamic(App.Data["Programs"])
.Where(p => ((List<DynamicEntity>)p.Season).First().EntityId == selectedSeason.EntityId);
// @programs.Count() // 97
foreach(var copy in programs)
{
var fields = new Dictionary<string, object>();
var ent = AsEntity(copy);
foreach(var attr in ent.Attributes)
{
if(attr.Key == "Season")
{
fields.Add(attr.Key, new List<int> { 1735 });
}
else
{
fields.Add(attr.Key, ent.GetBestValue(attr.Key)); // object??
}
}
App.Data.Create("Programs", fields);
}
推荐答案
至少有3种克隆方法
- 使用编辑界面的简单方式
- 使用C#/服务器API的硬方法
- 使用REST API的半硬方式
简单的方法是使用编辑用户界面。您可以在替换对话框中看到一个示例,那里有一个复制按钮。这将打开具有现有项目的编辑用户界面,但告诉它它是副本,因此在保存它时将创建一个新项目。
把这个和预填充料之类的结合起来,我想你就可以走了。
第二种方法是使用App.Data.Create-您的代码看起来相当不错。我想它也是有效的,你只是在想是不是有1行代码--还是我弄错了?
最后一种方法是使用JS REST。基本上,编写一些JS来获取项、更改对象(重置id)并将其回发到终结点以进行保存。
这篇关于有没有办法克隆代码中的多个实体(记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!