0

Dynamic Print Help

1. In the Domains to Audit Column I need every Domain in different line.

2 in the second image the Domains is a Multiple dynamic Choice with all domains.

3. In the next image the dynamic print

7 replies

null
    • Fred
    • 4 mths ago
    • Reported - view

    what does your JSON look like?

    can show the doc file used to create the tables?

      • Rafael Sanchis
      • Rafael_Sanchis
      • 4 mths ago
      • Reported - view

       This script is by UweG

      "Esta línea selecciona todos los registros de la tabla Audit Plan y los ordena por el campo Date (Fecha).";
      let vTbl := ((select 'Audit Plan') order by Date);
      "Aquí se crea un objeto vObj a partir de vTbl con la fecha formateada (vDat), la hora (vHour), la descripción (vDesc) y un arreglo de fechas (vDatArr) basado en las fechas que coinciden en la tabla.";
      let vObj := vTbl.{
              vDat: format(Date, "DD.MM.YYYY"),
              vHour: format(From, "hh:mm"),
              vProj: Projects.'Project Name',
              vDom: text(Domains),
              vDatArr: let xDat := Date;
              vTbl[Date = xDat].Date
          };
      "Inicializa xArr como un arreglo vacío y xObj como un objeto vacío.";
      let xArr := [{}];
      xArr := null;
      "Itera sobre cada elemento de vObj.Para el primer elemento (i = 0), agrega un atributo vSkip con valor 1 y lo añade a xArr.Para los elementos siguientes, compara los valores de vDatArr del elemento actual y el anterior. Si son iguales, establece vSkip en 0; si no, en 1, y luego lo añade a xArr.vSkip se utiliza probablemente para determinar si una fecha debe mostrarse o no en el informe, para evitar repetición de fechas.";
      let xObj := {};
      for i from 0 to cnt(vObj) do
          xObj := item(vObj, number(i));
          if i = 0 then
              setItem(xObj, "vSkip", 1);
              xArr := array(xArr, [xObj])
          else
              if item(vObj, number(i - 1)).text(vDatArr) = item(vObj, number(i)).text(vDatArr) then
                  setItem(xObj, "vSkip", 0);
                  xArr := array(xArr, [xObj])
              else
                  setItem(xObj, "vSkip", 1);
                  xArr := array(xArr, [xObj])
              end
          end
      end;
      "Construye un objeto JSON pJson que contiene el nombre Rafael Sanchis y la tabla procesada xArr.";
      let pJson := {
              pName: "Rafael Sanchis",
              pTbl: xArr
          };
      "Esta parte genera un informe utilizando la función printAndSaveRecord, lo guarda bajo el nombre PDynamic6 y lo importa como PrintOut.pdf en la base de datos.";
      Report := importFile(this, printAndSaveRecord(this, "ReportGrouping0", pJson), "PrintOut.pdf")
      • Rafael Sanchis
      • Rafael_Sanchis
      • 4 mths ago
      • Reported - view

       

      • Fred
      • 4 mths ago
      • Reported - view

      can you post a sample of your JSON results?

      • Rafael Sanchis
      • Rafael_Sanchis
      • 4 mths ago
      • Reported - view

       

      I sen you the dummy DB

    • Fred
    • 4 mths ago
    • Reported - view

    Here is what is going on. In your code you have:

    let vObj := vTbl.{
            vDat: format(Date, "DD.MM.YYYY"),
            vHour: format(From, "hh:mm"),
            vProj: Projects.'Project Name',
            vDom: text(Domains),
            vDatArr: let xDat := Date;
            vTbl[Date = xDat].Date
        };
    

    In line 5, you only grab the text values of the values in the Domains multichoice field.

    So that shows up as:

    "vDom":"4 Gestión del Cronograma del Proyecto, 5 Gestión de Costos",
    

    It is a simple string of text. Which means there is no way for Ninox to tell that there are multiple items to separate out.

    Since you want to have an array of the choices in the dynamic multichoice field, you will need to use a for loop command to get to the actual records then create a sub array of the data you need.

    You can replace the above with:

    let vObj := vTbl.{
            vDat: format(Date, "DD.MM.YYYY"),
            vHour: format(From, "hh:mm"),
            vProj: Projects.'Project Name',
            vDom: for domain in numbers(Domains) do
                let domRec := record(DOMAINS,domain);
                domRec.{
                    vPMI: 'PMI Dominio',
                    vDName: 'Domain Name'
                }
            end,
            vDatArr: let xDat := Date;
            vTbl[Date = xDat].Date
        };
    

    Line 5 now extends to line 11. Now the JSON looks like:

    "vDom":[{"vPMI":"4","vDName":"Gestión del Cronograma del Proyecto"},{"vPMI":"5","vDName":"Gestión de Costos"}],
    

    You can see a subarray is created and each choice is separated into its own curly bracket.

    Now you can modify your dynamic print form, which I'm not very good at, to point to each vDom and the subsequent subfields.

      • Rafael Sanchis
      • Rafael_Sanchis
      • 4 mths ago
      • Reported - view

       Hi Fred too thanks Works, now I need modify my dynamic print 👍

Content aside

  • Status Answered
  • 4 mths agoLast active
  • 7Replies
  • 72Views
  • 2 Following