1. Import do sloupce typu násobný odkaz

    Článek: AN0002446Aktualizováno:: 13.11.2020

    Standardní import neumožňuje importovat do sloupce typu násobný odkaz na jinou třídu nebo uživatele stejným způsobem jako do sloupců nesoucích jednu hodnotu. Tuto funkčnost však můžeme dosáhnout pomocí skriptu, který se spustí během importu.

    V našem příkladu budeme importovat ze souboru obsahujícího dva sloupce do třídy:

    Název sloupce v souboru Kód sloupce ve třídě
    Server_name name
    Server_contacts machine_contacts

    V souboru může být ve sloupci Server_contacts více hodnot oddělených čárkou, které představují odkaz na uživatele (např. účet nebo kód uživatel v systému ObjectGears). Jako oddělovač dvou výše uvedených sloupců pak musíme použít jiný znak, např. tabulátor nebo středník.

    V cílové třídě, do níž chceme importovat, máme sloupec typu Násobný odkaz na uživatele s kódem machine_contacts. Vedle toho si zřídíme pomocný sloupec typu Text, do něhož nastavíme import ze sloupce Server_contacts dle níže uvedeného příkladu. Uvedeme název sloupce ze souboru, ale nezaškrtneme import. Záznamy ze souboru se budou mapovat na záznamy ve třídě pomocí sloupce Server_name ze souboru a sloupce name ze třídy.

    V importu dále použijeme následující skript v události Spustit po dokončení importu.

    var colContacts = OGActualImport.ClassDef.Columns['machine_contacts'];
    //1.9.0.0 var colImpName = OGActualImport.ImportColumns.FindByColumnName('Server_name');
    //1.9.0.0 var colImpContants = OGActualImport.ImportColumns.FindByColumnName('Server_contacts');

    var colImpName = null;
    var colImpContants = null;
    for( var ii = 0 ; ii < OGActualImport.ImportColumns.Count; ++ii)
    {
      if ( OGActualImport.ImportColumns[ii].ColumnName == 'Server_name')
      {
        colImpName = OGActualImport.ImportColumns[ii];
      }
      else if ( OGActualImport.ImportColumns[ii].ColumnName == 'Server_contacts')
      {
        colImpContants = OGActualImport.ImportColumns[ii];
      }
    }


    //nacist zaznamy
    var sql = OG.TextUtils.Format('select col_{1}_s name, col_{2}_s contacts from {0} tab where iserror = 0 and col_{2}_s is not null',
    OGActualImportDbTable, colImpName.ColumnClassDefId, colImpContants.ColumnClassDefId);

    var dr = OG.Sql.GetExecuteReader(null, sql, OG.Sql.CreateParameterList());
    while( dr.Read())
    {
      //najit naparovany zaznam podle nazvu - musi byt jen jeden
      var drf = OG.DataRow.GetDataRowFilter(OGActualImport.ClassDefId);
      drf['name'] = dr.GetString('name');
      var drl = OG.DataRow.GetDataByFilter(drf);
      if ( drl.Count == 1)
      {
        //smazat stavajici odkazy na person
        var sql = OG.TextUtils.Format('delete from DataRow{0}LinkPerson where ColumnClassDefId = {1} and ReferentionId = {2}',
        colContacts.ParentId, colContacts.Id, drl[0].Id);
        OG.Sql.RunSql(sql);

        //rozparsovat kontakty
        var contacts = dr.GetString('contacts').split(',');

        for( var i = 0; i < contacts.length; i++)
        {
          //vlozit nove kontakty
          var sql = OG.TextUtils.Format('insert into DataRow{0}LinkPerson(ColumnClassDefId, ReferentionId, LinkReferentionId) select {1}, {2}, Id from Person where Code =        @personCode and Deleted is null', colContacts.ParentId, colContacts.Id, drl[0].Id);

          var pars = OG.Sql.CreateParameterList();
          pars.AddNvarchar( 'personCode', contacts[i]);

          OG.Sql.RunSql(null, sql, pars);
        };
      }
    }

     

×