有没有办法克隆代码中的多个实体(记录 [英] Is there a way to Clone one or many Entities (records) in Code

查看:19
本文介绍了有没有办法克隆代码中的多个实体(记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

注意:目前我在此项目上遇到了2sxc v9.43.2。

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

两个问题:

  1. 如果以这种方式工作,在fields.Add()
  2. 中需要传递";对象";的ent/属性上使用什么语法?
  3. 有没有其他2sxc方法可以做到这一点?是App.Data.Create()方法的其他变体还是API中的其他方法?我只需要复制1个字段(赛季)更改的记录?
  4. 在最新版本的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. 使用编辑界面的简单方式
  2. 使用C#/服务器API的硬方法
  3. 使用REST API的半硬方式

简单的方法是使用编辑用户界面。您可以在替换对话框中看到一个示例,那里有一个复制按钮。这将打开具有现有项目的编辑用户界面,但告诉它它是副本,因此在保存它时将创建一个新项目。

把这个和预填充料之类的结合起来,我想你就可以走了。

第二种方法是使用App.Data.Create-您的代码看起来相当不错。我想它也是有效的,你只是在想是不是有1行代码--还是我弄错了?

最后一种方法是使用JS REST。基本上,编写一些JS来获取项、更改对象(重置id)并将其回发到终结点以进行保存。

这篇关于有没有办法克隆代码中的多个实体(记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆