Могу ли я сделать дополнительный ввод обязательным, если присутствует другой дополнительный ввод? - PullRequest
0 голосов
/ 18 марта 2019

Я пишу действие, которое собирает три входа.Первый требуется, но второй и третий не являются обязательными.Поскольку второй и третий варианты имеют похожие типы, иногда третий тип заполняется, а второй остается незаполненным.

т.е. я хочу передать книгу, или книгу + страницу, или книгу+ page + номер строки

Очевидно, что я могу справиться с этим, выполнив несколько (почти идентичных) действий или в самой конечной точке, но возможно ли сделать зависимость входных данных одного действия, определяемую наличиемдругой ввод?

Действие в данный момент выглядит примерно так ...

collect {
  input (book) {
    type (String)
    min (Required) max (One)
  }
  input (page) {
    type (Integer)
    min (Optional) max (One)
  }
  input (line) {
    type (Integer)
    min (Optional) max (One)
  }
}

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Похоже, что лучший вариант (и пока я только смог найти) - создать, изменить оригинал, а затем добавить секунду. Наконец, добавьте новый action-endpoint к endpoints.

ReadBook удаляет опционально Линия

action (ReadBook) {
  description ("Read a page from a book (first if page isn't provided)."")
  type (Calculation)
  collect {
    input (book) {
      type (Book)
      min (Required) max (One)
    }
    input (page) {
      type (PageNum)
      min (Optional) max (One)
    }
  }
  output (Passage)
}

ReadBookLine делает все входные данные требуется

action (ReadBookLine) {
  description (Read a line from a book.)
  type (Calculation)
  collect {
    input (book) {
      type (Book)
      min (Required) max (One)
    }
    input (page) {
      type (PageNum)
      min (Required) max (One)
    }
    input (line) {
      type (LineNum)
      min (Required) max (One)
    }
  }
  output (Passage)
}

Endpoints

endpoints {
    action-endpoint (ReadBook) {
      accepted-inputs (book, page)
      remote-endpoint ("https://.../read_book) {
        method (POST)
      }
    }
    action-endpoint (ReadBookLine) {
      accepted-inputs (book, page, line)
      remote-endpoint ("https://.../read_book") {
        method (POST)
      }
    }
  }
}
0 голосов
/ 19 марта 2019

Учитывая ваш вариант использования, имеет смысл использовать default-init следующим образом:

collect {
  input (book) {
    type (String)
    min (Required) max (One)
  }
  input (page) {
    type (Integer)
    min (Optional) max (One)
    default-init {
      if (!exists(page)) {
        intent {
          goal: YOUR ACTION HERE
          value: Integer (1)
        }
      }
    }
  }
  input (line) {
    type (Integer)
    min (Optional) max (One)
    default-init {
      if (!exists(line)) {
        intent {
          goal: YOUR ACTION HERE
          value: Integer (1)
        }
      }
    }
  }
}

Это позволило бы номерам страниц и строк по умолчанию установить значение 1, если они не были предоставлены.пользователем.

...