copyFieldValues method

void copyFieldValues(
  1. NsgDataItem oldItem, {
  2. bool cloneAsCopy = false,
  3. List<String>? excludeFields,
  4. List<String>? includeFields,
  5. Map<String, String>? translateMap,
  6. bool copyEmptyFields = true,
  7. bool onlyMapFields = false,
})

Copy fields values from oldItem to this.

NsgDataItem thisItem = NsgDataItem(); //Объект в который копируем
NsgDataItem oldItem = NsgDataItem(); //Объект чьи поля копируем

thisItem.copyFieldValues(oldItem); //Clone all item fields as is
thisItem.copyFieldValues(oldItem, copyEmptyFields: false); //Clone all not empty item fields
thisItem.copyFieldValues(oldItem, includeFields: [NsgDataItemGenerated.fieldNameId]); //Clone only selected fields
thisItem.copyFieldValues(oldItem, excludeFields: [NsgDataItemGenerated.fieldNameId]); //Clone all fields exclude selected fields
thisItem.copyFieldValues(oldItem, translateMap: {OldNsgDataItemGenerated.fieldNameId: ThisNsgDataItemGenerated.fieldNameId}); //Clone all fields, using fields map dependencies.

For copy only specials fields, use includeFields. For exclude one or more fields, use excludeFields. If you want copy only not empty fields, use copyEmptyFields parametr. For copy fields values in other NsgDataItem type obj, use translateMap for set fields dependensies: {oldObjKey: thisObjKey}.

Implementation

void copyFieldValues(
  NsgDataItem oldItem, {
  bool cloneAsCopy = false,
  List<String>? excludeFields,
  List<String>? includeFields,
  Map<String, String>? translateMap,
  bool copyEmptyFields = true,
  bool onlyMapFields = false,
}) {
  if (onlyMapFields && translateMap != null) {
    includeFields = [];
    for (var element in translateMap.keys) {
      includeFields.add(element);
    }
  }
  fieldList.fields.forEach((key, value) {
    if (includeFields == null || includeFields.contains(key)) {
      if ((excludeFields == null || !excludeFields.contains(key))) {
        String translateKey = key;

        if (translateMap != null) {
          var k = translateMap[key];
          if (k != null) {
            translateKey = k;
          }
        }
        if (fieldList.fields[key] is NsgDataReferenceListField) {
          var newTable = NsgDataTable(owner: this, fieldName: translateKey);
          var curTable = NsgDataTable(owner: oldItem, fieldName: key);
          newTable.clear();
          for (var row in curTable.allRows) {
            var newRow = row.clone(cloneAsCopy: cloneAsCopy);
            if (cloneAsCopy) {
              newRow.copyRecordFill();
            }
            newTable.addRow(newRow);
          }
        } else {
          if (copyEmptyFields || !oldItem.fieldValues.emptyFields.contains(key)) {
            setFieldValue(translateKey, oldItem.getFieldValue(key));
          }
        }
      }
    }
  });
}