是否有方法在代码中克隆一个或多个实体(记录)



注意:此时我在这个项目上被困在2sxc v9.43.2上。

从我的内容类型中选择一组记录后,我需要能够复制它们,一路上更改其中一个字段。到目前为止,这是我几乎可行的想法。用例很简单,他们有人们可以注册的程序。它们每个季节都有变化,但只有一点点(价格、日期/时间等(。他们需要在编辑下一季时保持当前季的直播和不变。因此,我们仍处于秋季(EntityId 1732(,有97个活动程序。我们想点击一个按钮,按原样克隆所有97个节目,但进入新的下一季(以下1735(。

两个问题:

  1. 如果这种方式有效,那么在ent/Attributes上使用什么语法来传递";对象";根据fields.Add()行中的需要
  2. 还有别的2sxc方法吗?该应用程序的其他变体。数据在API中创建((方法或其他方法?我只需要在1个字段(季节(更改的情况下复制记录
  3. 在最新版本的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种方法可以克隆

  1. 使用edit-ui的简单方法
  2. 使用c#/server api的艰难途径
  3. 使用RESTapi的半硬方式

简单的方法是使用编辑ui。您可以在替换对话框中看到一个示例,其中有一个复制按钮。这将打开带有现有项目的编辑UI,但告诉它它是一个副本,所以保存时会创建一个新的。

再加上一个预填充或其他什么,我想你就可以去了。

第二种方法是使用应用程序。数据创建-您的代码看起来相当不错。我想它也行,你只是想知道是否有1行——或者我错了?

最后一种方法是使用JS REST。基本上写一些JS,它可以获得一个项,更改对象(重置id(并将其发布回端点进行保存。

我偶然发现了一种情况,我需要创建实体并设置其字段值,该值具有另一个实体的类型。如果这是您的问题#1,则需要添加EntityGuidfields.Add(attr.Key, attr.EntityGuid);。这应该将一个实体绑定到另一个实体。并没有,我并没有偶然发现复制实体的更好方法,而只是创建一个新实体。至少到目前为止。

相关内容

  • 没有找到相关文章

最新更新