Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Passing and array to an API
Message
From
09/05/2011 18:23:15
Joel Leach
Memorial Business Systems, Inc.
Tennessee, United States
 
 
To
09/05/2011 14:57:45
General information
Forum:
Visual FoxPro
Category:
Web Services
Environment versions
Visual FoxPro:
VFP 9 SP2
OS:
Windows XP
Application:
Web Service
Miscellaneous
Thread ID:
01510086
Message ID:
01510118
Views:
56
I don't know PHP, but it looks like it embeds and array within an array. I'm not sure you can do that in Fox (anyone else know?), but I can tell you store picarray to oArray(1,2) does not do that. It only stores the first member of picarray in oArray(1,2).

These PHP "arrays" look more like C structures or objects than arrays to me, because of the named members. I suppose that is a feature of the language, but by using it in the API, they may be locking out other clients, which kinda defeats the purpose of using SOAP in the first place.

Rick Strahl has done a lot of work with web services and complex types. Google that and also check out his wwSOAP and his Web Service Proxy Generator. I don't know if they address this particular issue, but maybe they will help.

>I am attempting to integrate my VFP P.O.S. with Magento an open source web cart. So far I have mee accessing the MySql database directly but I know the API functions should be quicker and safer. My current issue is with trying to translate the following example code :-S into something usable in VFP.
>
>$proxy = new SoapClient('http://magentohost/api/soap/?wsdl');
>$sessionId = $proxy->login('apiUser', 'apiKey');
>
>$newImage = array(
> 'file' => array(
> 'name' => 'file_name',
> 'content' => base64_encode(file_get_contents('product.jpg')),
> 'mime' => 'image/jpeg'
> ),
> 'label' => 'Cool Image Through Soap',
> 'position' => 2,
> 'types' => array('small_image'),
> 'exclude' => 0
>);
>
>$imageFilename = $proxy->call($sessionId, 'product_media.create', array('Sku', $newImage));
>
>
>var_dump($imageFilename);
>
>
>My attempt
>
>
>local cBitMap, cBitMap1
>cBitMap1=FILETOSTR(STORE.cpicdir-"\product\"-alltrim(positems.mainimage))
>cBitMap=STRCONV(cBitMap1,13)
>
>dimension picfile(3,2)AS ARRAY
>store "name" to picfile(1,1)
>store "aatestpicture.png" to picfile(1,2)
>store "content" to picfile(2,1)
>store cBitMap to picfile(2,2)
>store "mime" to picfile(3,1)
>store "image/png" to picfile(3,2)
>
>dimension typefile(1)
>store "small_image" to typefile
>
>dimension picarray(5,2)AS ARRAY
>store "file" to picarray(1,1)
>store picfile to picarray(1,2)
>store "label" to picarray(2,1)
>store "this is my test image" to picarray(2,2)
>store "position" to picarray(3,1)
>store 2 to picarray(3,2)
>store "types" to picarray(4,1)
>store typefile to picarray(4,2)
>store "exclude" to picarray(5,1)
>store 0 to picarray(5,2)
>
>dimension oArray(1,2) AS ARRAY
>store positems.cupcnumber to oArray(1,1)
>store picarray to oArray(1,2)
>
>
>LOCAL loMage_Api_Model_Server_HandlerPort AS "XML Web Service"
>* LOCAL loMage_Api_Model_Server_HandlerPort AS "MSSOAP.SoapClient30"
>* Do not remove or alter following line. It is used to support IntelliSense for your XML Web service.
>*__VFPWSDef__: loMage_Api_Model_Server_HandlerPort = http://www.fantasyfestival.com/api/soap/?wsdl , MagentoService , Mage_Api_Model_Server_HandlerPort
>LOCAL loException, lcErrorMsg, loWSHandler
>TRY
>	loWSHandler = NEWOBJECT("WSHandler",IIF(VERSION(2)=0,"",HOME()+"FFC\")+"_ws3client.vcx")
>	loMage_Api_Model_Server_HandlerPort = loWSHandler.SetupClient("http://www.fantasyfestival.com/api/soap/?wsdl", "MagentoService", "Mage_Api_Model_Server_HandlerPort")
>* Call your XML Web service here.  ex: leResult = loMage_Api_Model_Server_HandlerPort.SomeMethod()
>	sessionid = loMage_Api_Model_Server_HandlerPort.login("fanfest", "sk1ppy")
>	leResult2 = loMage_Api_Model_Server_HandlerPort.CALL(sessionid, "product_media.create", oArray)
>
>CATCH TO loException
>	lcErrorMsg="Error: "+TRANSFORM(loException.ERRORNO)+" - "+loException.MESSAGE
>	DO CASE
>	CASE VARTYPE(loMage_Api_Model_Server_HandlerPort)#"O"
>* Handle SOAP error connecting to web service
>	CASE !EMPTY(loMage_Api_Model_Server_HandlerPort.FaultCode)
>* Handle SOAP error calling method
>		lcErrorMsg=lcErrorMsg+CHR(13)+loMage_Api_Model_Server_HandlerPort.DETAIL
>	OTHERWISE
>* Handle other error
>	ENDCASE
>* Use for debugging purposes
>	MESSAGEBOX(lcErrorMsg)
>FINALLY
>ENDTRY
>
>
>It logs in just fine the I get the error box with "Error: 1429 - OLE IDispatch exception code 0 from ? : image is not specified.."
>All help would be greatly appreciated. :-U
Joel Leach
Microsoft Certified Professional
Blog: http://www.joelleach.net
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform