forked from eduard93/Cache-MDX2JSON
-
Notifications
You must be signed in to change notification settings - Fork 9
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Initial, adds all described functionality.
- Loading branch information
Showing
3 changed files
with
193 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
sc-list.txt |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,113 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<Export generator="Cache" version="25"> | ||
<Class name="MDX2JSON.REST"> | ||
<Description><![CDATA[ | ||
Class for REST-like web api for MDX2JSON transformation (and XML/A).<br> | ||
Example: send HTTP POST request to web application with Dispatch class <b>MDX2JSON.REST</b> | ||
with body: { "MDX":"QUERY" }, where QUERY is a correct MDX statement, ex: <br> | ||
{<br> | ||
"MDX": "SELECT NON EMPTY [Product].[P1].[Product Category].Members ON 0,NON EMPTY [Outlet].[H1].[Region].Members ON 1 FROM [HoleFoods]"<br> | ||
} <br> | ||
You can send requests to:<br> <ul> | ||
<li>webapplication/test - to get test info, %request, %response<br> | ||
<li>webapplication/MDX - to get result in JSONP format for MDX query<br> | ||
<li>webapplication/MDXDrillthrough - to get resulting listing in JSON format for MDX Drillthrough query<br> | ||
<li>webapplication/MDX2XMLA - to get result in XML/A format for MDX query<br></ul> ]]></Description> | ||
<Super>%CSP.REST</Super> | ||
<TimeCreated>63165,65257.8179</TimeCreated> | ||
|
||
<XData name="UrlMap"> | ||
<Data><![CDATA[ | ||
<Routes> | ||
<!-- Send objects in this format: {"MDX":"QUERY"} HTTP method: POST --> | ||
<Route Url="/MDX" Method="POST" Call="WriteJSONPfromMDX"/> | ||
<Route Url="/MDXDrillthrough" Method="POST" Call="WriteDrillthroughJSON"/> | ||
<Route Url="/MDX2XMLA" Method="POST" Call="WriteXMLAfromMDX"/> | ||
<!-- Valid but illicit, do not use--> | ||
<Route Url="/MDX/:query" Method="GET" Call="WriteJSONPfromMDXURL"/> | ||
<!-- Test method--> | ||
<Route Url="/test" Method="GET" Call="Test"/> | ||
</Routes> | ||
]]></Data> | ||
</XData> | ||
|
||
<Method name="Test"> | ||
<Description><![CDATA[ | ||
Test method, outputs <b>%request</b> and <b>%response</b> objects. ]]></Description> | ||
<ClassMethod>1</ClassMethod> | ||
<ReturnType>%Status</ReturnType> | ||
<Implementation><![CDATA[ | ||
&html<<h1>Status: OK!</h1><br>> | ||
zw %request | ||
&html<<br><br>> | ||
zw %response | ||
quit $$$OK | ||
]]></Implementation> | ||
</Method> | ||
|
||
<Method name="WriteDrillthroughJSON"> | ||
<Description><![CDATA[ | ||
Wrapper for ##class(MDX2JSON.Utils).WriteDrillthroughJSON(pMDX).<br> | ||
Converts incoming request object and calls abovementioned method.]]></Description> | ||
<ClassMethod>1</ClassMethod> | ||
<ReturnType>%Status</ReturnType> | ||
<Implementation><![CDATA[ | ||
set st = $$$OK | ||
set obj = ##class(%ZEN.proxyObject).%New() | ||
set st = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(%request.Content,,.obj,1) | ||
quit:$$$ISERR(st) st | ||
set st = ##class(MDX2JSON.Utils).WriteDrillthroughJSON(obj.MDX) | ||
quit st | ||
]]></Implementation> | ||
</Method> | ||
|
||
<Method name="WriteJSONPfromMDXURL"> | ||
<Description> | ||
Wrapper for ##class(MDX2JSON.Utils).WriteJSONPfromMDX(pMDX) | ||
Do not use.</Description> | ||
<Internal>1</Internal> | ||
<ClassMethod>1</ClassMethod> | ||
<FormalSpec>MDX:%String</FormalSpec> | ||
<ReturnType>%Status</ReturnType> | ||
<Implementation><![CDATA[ | ||
set MDX = $ZCONVERT($ZCONVERT(MDX ,"I","URL") ,"I","UTF8") | ||
set st = ##class(MDX2JSON.Utils).WriteJSONPfromMDX(MDX) | ||
quit st | ||
]]></Implementation> | ||
</Method> | ||
|
||
<Method name="WriteJSONPfromMDX"> | ||
<Description> | ||
Wrapper for ##class(MDX2JSON.Utils).WriteJSONPfromMDX(pMDX) | ||
Converts incoming request object and calls abovementioned method.</Description> | ||
<ClassMethod>1</ClassMethod> | ||
<ReturnType>%Status</ReturnType> | ||
<Implementation><![CDATA[ | ||
set st = $$$OK | ||
set obj = ##class(%ZEN.proxyObject).%New() | ||
set st = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(%request.Content,,.obj,1) | ||
quit:$$$ISERR(st) st | ||
set st = ##class(MDX2JSON.Utils).WriteJSONPfromMDX(obj.MDX) | ||
quit st | ||
]]></Implementation> | ||
</Method> | ||
|
||
<Method name="WriteXMLAfromMDX"> | ||
<Description> | ||
Wrapper for ##class(MDX2JSON.Utils).WriteXMLAfromMDX(pMDX) | ||
Converts incoming request object and calls abovementioned method.</Description> | ||
<ClassMethod>1</ClassMethod> | ||
<ReturnType>%Status</ReturnType> | ||
<Implementation><![CDATA[ | ||
set st=$$$OK | ||
set obj = ##class(%ZEN.proxyObject).%New() | ||
set st = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(%request.Content,,.obj,1) | ||
quit:$$$ISERR(st) st | ||
set st = ##class(MDX2JSON.Utils).WriteXMLAfromMDX(obj.MDX) | ||
quit st | ||
]]></Implementation> | ||
</Method> | ||
</Class> | ||
</Export> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,79 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<Export generator="Cache" version="25"> | ||
<Class name="MDX2JSON.Utils"> | ||
<Description><![CDATA[ | ||
Utility class, wrapping processing of MDX queries.<br> | ||
Outputs JSON, JSONP and XML/A.]]></Description> | ||
<Super>%RegisteredObject</Super> | ||
<TimeCreated>63165,65653.547419</TimeCreated> | ||
|
||
<Method name="WriteJSONPfromMDX"> | ||
<Description><![CDATA[ | ||
Automatic processing of MDX query and outputting resulting JSONP.<br> | ||
<b>pMDX</b> - String containing MDX query.<br> | ||
Returns NULL if there is an error in MDX query.]]></Description> | ||
<ClassMethod>1</ClassMethod> | ||
<FormalSpec>pMDX:%String</FormalSpec> | ||
<ReturnType>%Status</ReturnType> | ||
<Implementation><![CDATA[ | ||
try { | ||
set PageSize = 1000 | ||
set CurrPage = 1 | ||
set Params = "" | ||
set RS = ##class(%DeepSee.ResultSet).%New() | ||
#dim st As %Status = $$$OK | ||
set RS = ##class(%DeepSee.ResultSet).%ExecuteDirect(pMDX,.Params,st) | ||
do RS.%OutputJSON(PageSize,CurrPage,,PageSize) | ||
} catch ex { | ||
set st = ex.AsStatus() | ||
} | ||
quit st | ||
]]></Implementation> | ||
</Method> | ||
|
||
<Method name="WriteDrillthroughJSON"> | ||
<Description><![CDATA[ | ||
Automatic processing of MDX Drillthrough query and outputting resulting listing as JSON.<br> | ||
<b>pMDX</b> - String containing MDX Drillthrough query.<br> | ||
Returns NULL if there is an error in MDX query.]]></Description> | ||
<ClassMethod>1</ClassMethod> | ||
<FormalSpec>pMDX:%String</FormalSpec> | ||
<ReturnType>%Status</ReturnType> | ||
<Implementation><![CDATA[ | ||
try { | ||
set Params = "" | ||
set RS = ##class(%DeepSee.ResultSet).%New() | ||
#dim st As %Status = $$$OK | ||
set RS = ##class(%DeepSee.ResultSet).%ExecuteDirect(pMDX,.Params,st) | ||
set SQL = RS.%GetListingSQL() | ||
do ##class(%ZEN.Auxiliary.jsonSQLProvider).%WriteJSONFromSQL(,SQL,,$$$MaxCacheInt) | ||
} catch ex { | ||
set st = ex.AsStatus() | ||
} | ||
quit st | ||
]]></Implementation> | ||
</Method> | ||
|
||
<Method name="WriteXMLAfromMDX"> | ||
<Description><![CDATA[ | ||
Automatic processing of MDX query and outputting resulting XML/A.<br> | ||
<b>pMDX</b> - String containing MDX query.<br> | ||
Returns NULL if there is an error in MDX query.]]></Description> | ||
<ClassMethod>1</ClassMethod> | ||
<FormalSpec>pMDX:%String</FormalSpec> | ||
<ReturnType>%Status</ReturnType> | ||
<Implementation><![CDATA[ | ||
try { | ||
set Params = "" | ||
set RS = ##class(%DeepSee.ResultSet).%New() | ||
#dim st As %Status = $$$OK | ||
set RS = ##class(%DeepSee.ResultSet).%ExecuteDirect(pMDX,.Params,st) | ||
set st = RS.%OutputXMLA() | ||
} catch ex { | ||
set st = ex.AsStatus() | ||
} | ||
quit st | ||
]]></Implementation> | ||
</Method> | ||
</Class> | ||
</Export> |