2014-09-23 65 views
1

我有一个数据表和书籍列表。以下是我的SQL语句:Flowgear可配置的变量栏,通过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,具体取决于我想达到的目标。

回答

2
  1. 添加一个变量栏,并添加一个属性叫“salesValue”
  2. 在工作流详细信息窗格中,提供这样的URL:“/书目/ {salesValue}” - 在大括号中的数值必须的名称相匹配在可变酒吧
  3. 添加一个格式化的财产,把你的SQL模板,包括“WHERE(Bookquantity_in_stock * Bookprice)> {salesValue}”中的Expression属性,然后添加一个名为salesValue一个自定义字段和引脚,从变量bar的salesValue属性。设置转义为SQL。
  4. 取出格式器的输出并将其插入到SQL查询连接器的SQL查询属性中。
  5. 再添变数栏,并加入特殊性能FgResponseBody和FgResponseContentType
  6. 引脚的SQL结果FgResponseBody并设置FgResponseContentType为“text/xml的”

如果你想返回JSON,转换结果从SQL查询转换为JSON使用JSON转换,然后将其固定到FgResponseBody并将FgResponseContentType设置为'application/json'

+0

感谢您的简要解释,我能够获得销售价值为5000.00及以上的图书清单。但是,如果我想在我的API调用中使用包含销售值作为参数数组('saleasValue'=> 5000.00)作为curl post字段的一部分的post方法,那么我需要在工作流中配置什么?在这一刻,如果我配置我的工作流使用POST方法,而不是我得到一个异常“服务不可用”......谢谢 – Maximum86 2014-09-25 08:50:10

+0

@LuyandaSiko,你找到POST方法的任何解决方案?我面临同样的问题。 – tejashsoni111 2015-12-31 09:52:30

+0

@ LuyandaSiko,你有没有发现如何使用POST方法调用flowgear工作流程的任何解决方案?请帮助我我正面临问题 – sanjay 2015-12-31 10:03:44

0

@sanjay我会尝试给你一个当我在做Flowgear通过PHP遵循here的说明。

我不确定您是否还通过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', 
     ), 
); 

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

下面是一个典型的工作流程测试以及您应该返回到API中的内容。

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

注意:我已经使用这个平台一年多了,所以您可能会发现这个错误,但我希望它会引导您为您的问题寻找解决方案。如果没有,那么也许你可以创建一个回购协议,让我检查一下,看看你如何配置一切。