Flowgear настраиваемая панель переменных для запроса SQL через API

У меня есть таблица данных со списком книг. Ниже мое заявление sql:

SELECT `Book`.`id` , `Book`.`name` , `Book`.`isbn` , `Book`.`quantity_in_stock` , `Book`.`price` , (`Book`.`quantity_in_stock` * `Book`.`price`) AS `sales`, concat(`Author`.`name`, ' ', `Author`.`surname`) AS `author`
FROM `books` AS `Book`
LEFT JOIN authors AS `Author`
ON ( `Book`.`author_id` = `Author`.`id` )
WHERE  (`Book`.`quantity_in_stock` * `Book`.`price`) > 5000.00

Запрос работает нормально, и рабочий процесс тоже работает отлично. Тем не менее, я хочу получить доступ к этому через API и сделать значение 5000,00 настраиваемым через переменную панель.

Вопрос в том, как сделать это возможным, чтобы при вызове моего API с конечной точкой ниже он работал?

https://domain.flowgear.io/5000booklist/{sales_value}

Я хочу иметь возможность повторно использовать мой рабочий процесс через API и просто передавать значение продаж, по которому я хочу запросить таблицу. Объем продаж может быть 2000 или 5000 в зависимости от того, чего я хочу достичь.

1

Решение

  1. Добавьте переменную bar и добавьте к ней свойство под названием «salesValue»
  2. В области сведений о рабочем процессе укажите этот URL: «/ booklist / {salesValue}» — значение в фигурных скобках должно совпадать с именем свойства на панели переменных
  3. Добавьте форматер, поместите свой шаблон SQL, включая «ГДЕ (Book,quantity_in_stock * Book,price)> {salesValue} «в свойстве Expression, затем добавьте настраиваемое поле с именем salesValue и закрепите его в свойстве переменной bar salesValue. Установите Escaping в SQL.
  4. Возьмите выходные данные Formatter и вставьте их в свойство SQL-запроса коннектора SQL-запроса.
  5. Добавьте еще одну переменную bar и добавьте специальные свойства FgResponseBody и FgResponseContentType.
  6. Прикрепите результат SQL к FgResponseBody и установите FgResponseContentType в «text / xml»

Если вы хотите вернуть JSON, преобразуйте результат из SQL-запроса в JSON с помощью JSON Convert, а затем прикрепите его к FgResponseBody и установите для FgResponseContentType значение ‘application / json’

2

Другие решения

@sanjay Я постараюсь дать вам обзор того, что я делал тогда, когда я экспериментировал с Flowgear через PHP, следуя инструкциям Вот.

Я не уверен, что вы также вызываете API-интерфейс Flowgear REST через PHP или любой другой язык, но, как я полагаю, логика должна оставаться прежней.

Что я сделал, так это обернул пример кода PHP CURL в класс, чтобы я мог использовать его повторно. Ниже приведен код, который я написал для простого запроса на выборку:

<?php

//Require the FlowgearConnect class
require_once '/path/to/flowgear_class_with_api_call.php';

try{

$workflow = new FlowgearConnect(return include 'endpoints.php');

$serial = $_POST['serial'];
$clientId = $_POST['client_id'];

//Get the results
$sql = '';
if(empty($serial)){
$conditions = sprintf(' `a`.`client_id` = %s AND `a`.`serial` > -1 ORDER BY `a`.`serial` ASC', $clientId);
}else{
$conditions = ' `a`.`serial` = ' . $serial;
}

/**
In your workflow you will most probably have a VARIABLE BAR that holds your request parameters which is what $conditions speaks to.
*/
$conditions = array('conditions' => $conditions);

$results = $workflow->getResults('orders', 'orders', $conditions);
}catch(catch any exceptions thrown by the API here){
//Log the exceptions here or do whatever
}

Список выше должен быть понятен. Ниже я покажу вам функции, которые я использовал из моего класса FlowgearConnect. Это не стандартный способ, поскольку вы можете настроить свой код по-разному в соответствии с вашими потребностями.

//FlowgearConnect constructor
class FlowgearConnect
{
protetced $endpoints = [];

protected $domain = "https://your-domain.flowgear.io";

public function __construct(array $endpoints)
{
$this->endpoints = $endpoints;
}

public function getResults($model, $workflow, $options= array())
{
$endpoint = $this->getEndpoint($model, $workflow);

$results = array();
if(!empty($endpoint)){
$results = FlowgearInvoke::run($authOpts, $endpoint, $options, array('timeout' => 30));
}
return $results;
}

....
}

Файл enpoints.php, как упоминалось ранее, просто возвращает массив сконфигурированных конечных точек и / или имен worflow из консоли Flowgear. Ниже приводится выдержка из того, как выглядело мое:

return array(
'orders' => array(
'shipped_orders' => '/shipped_orders',
//etc
),
'items' => array(
'your_model' => '/workflow_name_from_flowgear_console',
),
);

Это просто базовый запрос выбора с API REST Flowgear, использующий PHP. Если вам повезет, вы должны получить свои записи так, как настроили свое тело ответа для рабочего процесса.

Ниже приведено типичное тестирование рабочего процесса и того, что вы должны получить в своем API.

Я советую вам сначала создать ваши рабочие процессы на консоли Flowgear и убедиться, что требуемый вывод и извлечение нужных вам частей не изменили ваш запрос, переместите их в переменную панель для вашего запроса и вставьте их во время выполнения. время, основанное на том, что вы хотите достичь. Это объяснение можно заменить другими операциями, такими как обновление и / или удаление. Лучше всего сначала понять flowgear и убедиться, что у вас все может работать, прежде чем пытаться создать спокойное интерактивное приложение.
введите описание изображения здесь

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

0

По вопросам рекламы [email protected]