docs: @Override
    public final EmailMsg process(
      final Map<String, Object> pAddParam, final EmailMsg pEntity,
        final IRequestData pRequestData) throws Exception {
      if (pEntity.getIsNew()) {
        this.srvOrm.insertEntity(pAddParam, pEntity);
        pEntity.setIsNew(false);
      } else {
        if (pEntity.getIsSent()) {
          throw new ExceptionWithCode(ExceptionWithCode.WRONG_PARAMETER,
            "can_not_change_sent_email");
        }
        boolean isNeedSend = false;
        if (pRequestData.getParameter("actionAdd") != null) {
          //send from form/list
          isNeedSend = true;
        }
        if (isNeedSend) {
          Erecipient erec = new Erecipient();
          erec.setItsOwner(pEntity);
          pEntity.setErecipients(getSrvOrm()
            .retrieveListForField(pAddParam, erec, "itsOwner"));
          if (pEntity.getErecipients().size() == 0) {
            throw new ExceptionWithCode(ExceptionWithCode.WRONG_PARAMETER,
              "choose_recipient");
          }
          pEntity.setEmailConnect(this.srvOrm.retrieveEntity(pAddParam,
            pEntity.getEmailConnect()));
          EmailStringProperty emStrProp = new EmailStringProperty();
          emStrProp.setItsOwner(pEntity.getEmailConnect());
          pEntity.getEmailConnect().setStringProperties(getSrvOrm()
            .retrieveListForField(pAddParam, emStrProp, "itsOwner"));
          EmailIntegerProperty emIntProp = new EmailIntegerProperty();
          emIntProp.setItsOwner(pEntity.getEmailConnect());
          pEntity.getEmailConnect().setIntegerProperties(getSrvOrm()
            .retrieveListForField(pAddParam, emIntProp, "itsOwner"));
          Eattachment eattach = new Eattachment();
          eattach.setItsOwner(pEntity);
          pEntity.setEattachments(getSrvOrm()
            .retrieveListForField(pAddParam, eattach, "itsOwner"));
          getEmailSender().openConnection(pAddParam, pEntity.getEmailConnect());
          getEmailSender().sendEmail(pAddParam, pEntity);
          getEmailSender().closeConnection(pAddParam, pEntity.getEmailConnect());
          pEntity.setIsSent(true);
        }
        this.srvOrm.updateEntity(pAddParam, pEntity);
      }
      return pEntity;
    }