docs: @Override
    public final void convert(final Map<String, Object> pAddParam,
      final Object pFrom, final ColumnsValues pTo,
        final String pName) throws Exception {
      Class<?> fromClass = (Class<?>) pAddParam.get("fromClass");
      //reveal foreign ID fields names:
      TableSql foreignTable = this.tablesMap.get(fromClass.getSimpleName());
      if (foreignTable.getIdColumnsNames().length == 1) {
        // NON-composite ID, e.g. GoodsRating.goods:
        // e.g. getter for itsId in foreign entity InvItem:
        Field field = this.fieldsRapiHolder.getFor(fromClass,
          foreignTable.getIdColumnsNames()[0]);
        Method getter = this.gettersRapiHolder.getFor(fromClass,
          foreignTable.getIdColumnsNames()[0]);
        if (!tryToPutIdable(field, getter, pFrom, pTo, pName)) {
          String idForeignEntityNm = foreignTable.getFieldsMap()
            .get(foreignTable.getIdColumnsNames()[0]).getForeignEntity();
          boolean isSolved = false;
          if (idForeignEntityNm != null) {
            // e.g. CartItem.itsOwner - ShoppinCart has ID OnlineBuyer
            TableSql idForeignTable = this.tablesMap.get(idForeignEntityNm);
            if (idForeignTable.getIdColumnsNames().length == 1) {
              // e.g. optional SeSeller in CartLn that has ID DebtorCreditor
              Object idObject = null;
              if (pFrom != null) {
                idObject = getter.invoke(pFrom);
              }
              // e.g. itsId of OnlineBuyer
              Field fieldId = this.fieldsRapiHolder.getFor(field.getType(),
                idForeignTable.getIdColumnsNames()[0]);
              Method getterId = this.gettersRapiHolder.getFor(field.getType(),
                idForeignTable.getIdColumnsNames()[0]);
              if (tryToPutIdable(fieldId, getterId, idObject, pTo, pName)) {
                isSolved = true;
              }
            }
          }
          if (!isSolved) {
            String msg =
              "There is no rule to fill column foreign id value from field "
                + pName + " of " + field.getType() + " in " + pFrom;
            throw new ExceptionWithCode(ExceptionWithCode.NOT_YET_IMPLEMENTED,
              msg);
          }
        }
      } else { // foreign entity with composite ID always represented
        // in SQL table as set of fields with names and types as
        // in original table, e.g.:
        // org.beigesoft.test.persistable.UserRoleTomcatPriority.userRoleTomcat
        // which be represented as itsUser='admin' and "itsRole='role'
        for (String idFldNm : foreignTable.getIdColumnsNames()) {
          Method getter = this.gettersRapiHolder.getFor(fromClass,
            idFldNm);
          Field field = this.fieldsRapiHolder.getFor(fromClass,
            idFldNm);
          if (!tryToPutIdable(field, getter, pFrom, pTo, idFldNm)) {
            TableSql foreignIdTable = this.tablesMap.get(field.getType()
              .getSimpleName());
            if (foreignIdTable == null
              || foreignIdTable.getIdColumnsNames().length > 1) {
              String msg =
                "There is no rule to fill column foreign id value from field "
                  + pName + " of " + field.getType() + " in " + pFrom;
              throw new ExceptionWithCode(ExceptionWithCode.NOT_YET_IMPLEMENTED,
                msg);
            }
            // ID is also foreign key, and it must be of simple type
            // e.g. UserRoleTomcatPriority.userRoleTomcat.itsUser
            Method getterId = this.gettersRapiHolder.getFor(field.getType(),
              foreignIdTable.getIdColumnsNames()[0]);
            Field fieldId = this.fieldsRapiHolder.getFor(field.getType(),
              foreignIdTable.getIdColumnsNames()[0]);
            Object idVal;
            if (pFrom ==  null) {
              idVal = null;
            } else {
              idVal = getter.invoke(pFrom); // e.g. UserTomcat
            }
            if (!tryToPutIdable(fieldId, getterId, idVal, pTo,
              foreignIdTable.getIdColumnsNames()[0])) {
              String msg =
                "Can't fill FCID 2L: " + foreignIdTable.getIdColumnsNames()[0]
                  + " of " + fieldId.getType() + " in " + idVal;
              throw new ExceptionWithCode(ExceptionWithCode.NOT_YET_IMPLEMENTED,
                msg);
            }
          }
        }
      }
    }