2015-04-24 44 views
2

,我發現這個反應非常有用Volusion的通用SQL文件夾,功能

How to write join query in Volusion API

我正在尋找的是一個方法我自己.SQL和.XSD文件添加到/ vspfiles /模式/通用文件夾,並能夠傳遞參數給它。有誰知道這是否可能。

A中的SQL非常基本的例子是這樣的......

SELECT * FROM訂單,其中的order_id = 「-ORDERID-」

...我想要能夠通過在「-ORDERID-」中作爲變量。

甚至更​​好的SQL文件只是這個「-SQL-」,我可以自己傳入整個SQL字符串。謝謝!

回答

0

雖然技術上可以傳遞包含完整SQL查詢的文本,但是我會強烈建議您不要這樣做,因爲這會打開您的網站以應對惡意活動和/或可能的安全問題。我將範圍限制爲特定的查詢,並且只允許使用一個或多個參數。

要做到這一點,您必須在Volusion中創建一個自定義ASP頁面,該頁面將從用戶收集參數,在您的情況「訂單ID」中,然後將其插入到設置的SQL查詢中,將該SQL查詢寫爲文本文件到正確位置的服務器,如https://stackoverflow.com/a/29134928/357034所示,然後執行查詢。所有這些都在自定義ASP頁面中完成。

更新:如果你只是想要一個簡單的命令id查詢返回所有字段,你甚至不必使用SQL方法,因爲Volusion已經有一個內置的方法來返回這些數據。您只需使用自定義ASP頁面來插入訂單ID參數,然後使用附加的參數執行URL。在你的ASP頁面,你會插入訂單ID代替XXXXX

http://www.yoursiteurl.com/net/[email protected]&EncryptedPassword=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxC&EDI_Name=Generic\Orders&SELECT_Columns=*&WHERE_Column=o.OrderID&WHERE_Value=xxxxx 
+0

您無法在上面顯示的URL中傳遞自定義SQL查詢或使用多個查詢參數。正如我之前所說的那樣,爲了解決這個問題,您需要構建一個自定義ASP頁面,您可以從所運行的任何應用程序(甚至是多個參數)中傳遞參數。然後用這些參數形成SQL查詢服務器端,並執行上述和我提供的計算器鏈接中的查詢。 Volusion API將回應數據並將其返回給您的應用程序。 – user357034

+0

看起來像一個非常笨重的解決方案,但這就是我現在正在做的(直到Volusion支持回到我身上 - 這似乎不大可能)。我使用PHP。我正在動態創建一個SQL文件,將其添加到Volusion的「通用」文件夾中,然後通過Web服務調用調用我的文件(以執行SQL)。這感覺像一個非常繁重的過程(需要3-5秒,主要是FTP時間)。如果我可以在Web服務調用中發送參數來插入我的SQL,那麼我會更加高興....哦。謝謝您的幫助! – theCodeWhisperer

+0

同樣,你可以做你想做的事情,你只需要在你的Volusion網站上創建一個ASP頁面,它檢索發送給它的參數,然後用這些參數將SQL查詢寫入「通用」文件夾中的文本文件。一旦寫入並驗證文件存在,此ASP頁面將執行文本文件的SQL查詢並返回請求的數據。這實際上是一個非常簡單的過程。 – user357034

3

感謝user357034你爲我在這裏(我「上」你的答案,但我是新的,沒有任何口碑)的。我想發佈我用來防止其他人遇到此問題的代碼。如果你看到任何看起來很愚蠢的東西,也可以獲得任何反饋。

首先,我創建了一個ASP文件,像這樣

Dim orderid 
Dim status 
orderid = Request.QueryString("orderid") 
status = Request.QueryString("status") 
sql = " update Orders " & _ 
     " set OrderStatus = '" + status + "' " & _ 
     " where Orderid in (" + orderid + ") " ; 

set fs=Server.CreateObject("Scripting.FileSystemObject") 
set f=fs.OpenTextFile(Server.MapPath("./MY_FILE.sql"),2,true) 
f.WriteLine(sql) 
f.Close 
set f=Nothing 
set fs=Nothing 

我通過FTP,截至上Volusion「通用」文件夾中。

其次,在PHP中,我把這個文件中,類似這樣的...

$asp = file("http://MY_SITE/v/vspfiles/schema/generic/MY_FILE.asp? 
     orderid=11,12&status=Processing"); 
foreach ($asp as $line) 
{ 
    echo ($line); 
} 

注:我已經通過FTP XSD文件到同一文件夾具有相同的名稱,像MY_FILE.xsd。

最後,我做一個Web服務調用我的服務,像這樣...

$url = "http://MY_SITE/net/WebService.aspx? 
      Login=XXXX&EncryptedPassword=YYYYY&API_Name=Generic\MY_FILE" 

的偉大工程。我進入Volusion管理站點,查看訂單11和12,並且它們已更新。我在Volusion的幾個領域使用這種方法,他們的API缺乏。謝謝!

+0

儘管您正在做的事情會起作用,但您可能需要清理傳入的查詢字符串數據以防止可能的SQL注入。因此,例如檢查已知可能值的狀態QS並檢查訂單ID QS以確保它們包含數字。只有這樣它纔會運行更新查詢,否則,如果他們找出您的「MY_FILE」名稱,則可以輕鬆地插入自己的查詢。 – user357034