注意:此时我在这个项目上停留在 2sxc v9.43.2 上。
从我的内容类型中选择一组记录后,我需要能够复制它们并沿途更改其中一个字段。到目前为止,这是我几乎可行的想法。用例很简单,他们有人们可以注册的程序。他们每个季节都有变化,但变化很小(价格、日期/时间等)。他们需要当前季节保持不变,同时编辑下一季节。因此,我们仍处于秋季(EntityId 1732),有 97 个活跃计划。我们想要单击一个按钮并按原样克隆所有 97 个节目,但进入新的下一季(下面的 1735 个)。
两个问题:
- 如果这种方式有效,那么什么语法适用于 ent/Attributes 来根据需要传递“对象”
fields.Add()
line
- 还有另一种 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种克隆方法
- 使用 edit-ui 的简单方法
- 使用 C# / 服务器 api 的困难方法
- 使用 REST api 的半困难方式
最简单的方法是使用编辑用户界面。您可以在替换对话框中看到一个示例,那里有一个复制按钮。这将打开包含现有项目的编辑 UI,但告诉它它是一个副本,因此在保存时它将创建一个新项目。
将其与预填充或其他东西结合起来,我想你就可以开始了。
第二种方法是使用 App.Data.Create - 您的代码看起来相当不错。我认为它也有效,你只是想知道是否有 1-liner - 或者我错了?
最后一种方法是使用 JS REST。基本上编写一些 JS 来获取一个项目,更改对象(重置 id)并将其发送回端点进行保存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)