¿Hay alguna forma de clonar una o varias entidades (registros) en el código?

Nov 09 2020

NOTA: en este momento estoy atascado en 2sxc v9.43.2 en este proyecto.

Después de seleccionar un conjunto de registros de mi tipo de contenido, necesito poder duplicarlos cambiando 1 de los campos en el camino. Aquí está mi idea casi funcional hasta ahora. El caso de uso es simple, tienen programas en los que la gente puede registrarse. Cambian cada temporada, pero solo un poco (precios, fechas / horarios, etc.). Y necesitan la temporada actual en vivo y sin cambios mientras editan la próxima temporada. Entonces, todavía estamos en la temporada de otoño (EntityId 1732) con 97 programas activos. Queremos hacer clic en un botón y clonar los 97 programas como están, pero EN LA nueva próxima temporada (1735 a continuación).

Dos preguntas:

  1. si esta forma funciona, ¿qué sintaxis funcionaría en ent / Attributes para entregar el "objeto" según sea necesario en la fields.Add()línea
  2. ¿Hay otra forma 2sxc de hacer esto? ¿Alguna otra variante del método App.Data.Create () o algún otro método en la API? Solo necesito duplicar el registro con 1 campo (Temporada) cambiado.
  3. ¿Existe una mejor manera de hacer esto en las últimas versiones de 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);
    }

Respuestas

1 iJungleBoy Dec 07 2020 at 06:35

Hay al menos 3 formas de clonar

  1. Manera simple usando edit-ui
  2. manera difícil usando c # / server api
  3. Forma semi-difícil usando REST api

La forma más sencilla es utilizar la interfaz de usuario de edición. Puede ver un ejemplo en el cuadro de diálogo reemplazar, hay un botón de copia allí. Esto abriría la interfaz de usuario de edición con un elemento existente, pero dígale que es una copia, por lo que al guardarlo se crearía uno nuevo.

Combine esto con un prellenado o algo y creo que estaría listo para comenzar.

La segunda forma es usar App.Data.Create: su código se ve bastante bien. Supongo que también funciona y te estabas preguntando si había una sola línea, ¿o me equivoco?

La última forma es usando JS REST. Básicamente, escriba algo de JS que obtenga un elemento, cambie el objeto (restablezca la identificación) y lo publique en el punto final para guardarlo.

1 ConstantineKetskalo Dec 01 2020 at 19:09

Me encontré con una situación en la que necesitaba crear una entidad y establecer su valor de campo, que tiene el tipo de otra entidad. Si esa es su pregunta n. ° 1, debe agregarla EntityGuid. fields.Add(attr.Key, attr.EntityGuid);. Eso debería vincular una entidad a otra. Y no, no encontré una mejor manera de copiar la entidad que simplemente crear una nueva. Al menos hasta ahora.