Flowgear可配置变量栏,用于通过API进行sql查询

时间:2014-09-23 11:05:05

标签: php mysql integration flowgear

我有一个包含书籍列表的数据表。下面是我的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。

2 个答案:

答案 0 :(得分:2)

  1. 添加一个变量栏并为其添加一个名为" salesValue"
  2. 的属性
  3. 在工作流程明细窗格中,提供以下网址:" / booklist / {salesValue}" - 大括号中的值必须与变量栏中的属性名称匹配
  4. 添加格式化程序,将您的SQL模板包括" WHERE(Bookquantity_in_stock * Bookprice)> {salesValue}"在Expression属性中,然后添加一个名为salesValue的自定义字段,并从变量bar salesValue属性中固定该字段。将Escaping设置为SQL。
  5. 获取Formatter的输出并将其插入SQL Query Connector的SQL Query属性。
  6. 添加另一个变量栏,并添加特殊属性FgResponseBody和FgResponseContentType
  7. 将SQL结果固定到FgResponseBody并将FgResponseContentType设置为' text / xml'
  8. 如果要返回JSON,请使用JSON Convert将结果从SQL Query转换为JSON,然后将其固定为FgResponseBody并将FgResponseContentType设置为' application / json'

答案 1 :(得分:0)

@sanjay我将尝试概述当时我按照here的说明通过PHP试验Flowgear时所做的事情。

我不确定您是否也通过PHP或任何其他语言调用Flowgear REST API,但不管我认为逻辑应该保持不变。

我所做的是将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文件只返回flowgear控制台中配置的端点和/或worflow名称的数组。以下是我的样子的摘录:

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

这只是使用Flow的Flowgear REST API的基本选择查询。如果您很幸运,您应该按照为工作流配置响应主体的方式获取记录。

以下是对工作流程的典型测试以及您应该在API中获得的内容。

我建议您首先在flowgear控制台上创建工作流程,并确保生成所需的输出并提取您想要更改的部件而不是您的查询,将它们移动到您的请求的变量栏并注入它们在运行时基于您希望实现的目标。此解释可以替代其他操作,例如更新和/或删除。最好的方法是首先了解flowgear,并确保在尝试创建一个安静的交互式应用程序之前,你可以在那里工作。 enter image description here

警告:我在这个平台上工作了一年多,所以你可能会发现错误,但我希望它会引导你找到解决问题的方法。如果没有,那么也许您可以创建一个回购并让我检查它以了解您如何配置所有内容。