requestSubmitFn, validateFn 비교 예제

아래 예제 YAML을 통해 데이터 입력시 검증하는 방법들을 비교할 수 있습니다.

  • validateFn
  • validateFromQuery
  • requestSubmitFn

관련하여 도움이 필요하시면 말씀해주세요.

menus:
- path: pages/6SXXlA
  name: validateFn, requestSubmitFn
pages:
- path: pages/6SXXlA
  blocks:
  - type: query
    resource: mysql.qa
    sqlType: insert
    sql: >
      INSERT INTO wine_stock
      SET name = :name
    params:
      - key: name
        label: 사업자번호 1234567890
        required: true
        validateFromQuery:
          type: query
          resource: mysql.qa
          sql: >
            SELECT COUNT(id) AS count
            FROM wine_stock
            WHERE name = :value
          validateFn: |
            if (+validateFromQuery.count > 0) {
              return '중복된 사업자번호 입니다.'
            }
            return true
        validateFn: |
          if (param.value.length != 10) {
            return '사업자번호(10자리)를 입력해주세요.'
          }
          if (!isFinite(+param.value)) {
            return '사업자 번호만 입력해주세요.'
          }
          return true
        
        # showValidateButton: true
        # validateButtonLabel: 사업자조회
        
        # validText: 새로운 사업자번호 사용가능

    id: query1
    requestSubmitFn: |
      const name = query1.params.name

      if (!name || !name.value) {
        throw new Error('사업자번호가 제공되지 않았습니다.');
      }

      if (name.value.length != 10) {
        throw new Error('사업자번호(10자리)를 입력해주세요.');
      }
      if (!isFinite(+name.value)) {
        throw new Error('사업자 번호만 입력해주세요.');
      }

      return true;

validate with requestFn

display: form 에서 columns updateOptions를 통해 데이터 업데이트시 검증하여 실행되지 않게 할 수도 있습니다.

예제 YAML

      display: form
      columns:
        name:
          help: 3868802410 으로 변경시 실패해야함 
          updateOptions:
            type: query
            resource: mysql.qa
            sql: |
              UPDATE wine_stock SET name = :value
              WHERE id = :id
            requestFn: |
              const value = params.find(e => e.key == 'value')
              if (value._checked) throw new Error('중복 확인이 필요합니다. (미입력 상태에서 저장 누름)')
              if (value._invalid) throw new Error(value._invalidText)

          validateFromQuery:
            type: query
            resource: mysql.qa
            sql: >
              SELECT COUNT(id) AS count
              FROM wine_stock
              WHERE name = :value
            validateFn: |
              if (+validateFromQuery.count > 0) {
                return '중복된 사업자번호 입니다.'
              }
              return true
          validateFn: |
            if (param.value.length != 10) {
              return '사업자번호(10자리)를 입력해주세요.'
            }
            if (!isFinite(+param.value)) {
              return '사업자 번호만 입력해주세요.'
            }
            return true

이해가 어렵거나 도움이 필요하시면 말씀해주세요.
감사합니다.