java android magento xml-rpc

java - Android-Magento- Cómo obtener los detalles de múltiples productos en Android usando XML-RPC



(3)

La respuesta

ya que Android está basado en la aplicación Java, puedes usar esto.

package org.apache.xmlrpc; import java.util.Hashtable; import java.util.Vector; public class MultiCall implements ContextXmlRpcHandler { public Object execute(String method, Vector params, XmlRpcContext context) throws Exception { if ("multicall".equals(method)) { return multicall(params, context); } throw new NoSuchMethodException("No method ''" + method + "'' in " + this.getClass().getName()); } public Vector multicall(Vector requests, XmlRpcContext context) { // The array of calls is passed as a single parameter of type array. requests=(Vector)requests.elementAt(0); Vector response = new Vector(); XmlRpcServerRequest request; for (int i = 0; i < requests.size(); i++) { try { Hashtable call = (Hashtable) requests.elementAt(i); request = new XmlRpcRequest((String) call.get("methodName"), (Vector) call.get("params")); Object handler = context.getHandlerMapping().getHandler(request.getMethodName()); Vector v = new Vector(); v.addElement(XmlRpcWorker.invokeHandler(handler, request, context)); response.addElement(v); } catch (Exception x) { String message = x.toString(); int code = (x instanceof XmlRpcException ? ((XmlRpcException) x).code : 0); Hashtable h = new Hashtable(); h.put("faultString", message); h.put("faultCode", new Integer(code)); response.addElement(h); } } return response; } }

Fuente

Como Magento es compatible con la API SOAP, ¿por qué no utilizaste SOAP API v1? porque SOAP es poderoso. intente ir aquí ¿Cuál es la diferencia entre XML-RPC y SOAP?

El análisis de los mensajes de Soap no está incluido en el tiempo de ejecución de Android, por lo que no es muy sencillo. Debe usar una biblioteca externa. Estoy usando ksoap2.

Si busca aquí en StackOverflow , verá muchos ejemplos sobre cómo usarlo. Por ejemplo aquí

más referencias: enlace 1 enlace 2

MultiCall con PHP

$client = new Zend_XmlRpc_Client(''http://magentohost/api/xmlrpc/''); // If somestuff requires api authentification, // we should get session token $session = $client->call(''login'', array(''apiUser'', ''apiKey'')); $client->call(''call'', array($session, ''somestuff.method'', array(''arg1'', ''arg2'', ''arg3''))); $client->call(''call'', array($session, ''somestuff.method'', ''arg1'')); $client->call(''call'', array($session, ''somestuff.method'')); $client->call(''multiCall'', array($session, array( array(''somestuff.method'', ''arg1''), array(''somestuff.method'', array(''arg1'', ''arg2'')), array(''somestuff.method'') ) )); // If you don''t need the session anymore $client->call(''endSession'', array($session));

Cómo obtener los detalles de múltiples productos en una Single Call en Android usando XMLRPC de Magento. Puedo obtener la lista de productos usando la función catalog_product.list usando XMLRPC.

Ahora, tengo los ID de SKU de todos los productos. Puedo obtener los detalles de los medios de cada producto usando la función product_media.list .

Si supongo que tengo 10 productos, tengo que llamar 10 veces al método product_media.list para cada producto, lo que lleva mucho tiempo.

Entonces, ¿cómo puedo llamar a la función multiCall de Magento en Android? Muchos tutoriales en php para llamar a la función multiCall están publicados, pero no puedo imitar lo mismo en Android.

Así que, por favor, multiCall si tiene un fragmento de código similar que pueda hacerme entender la función multiCall ( para Android ), de modo que pueda avanzar más usando eso.
Gracias.

Ejemplo de código PHP de Josua Marcel Chrisano ''s Answer :

$session = $client->call(''login'', array(''apiUser'', ''apiKey'')); $client->call(''call'', array($session,''somestuff.method'', array(''arg1'', ''arg2'', ''arg3''))); $client->call(''call'', array($session, ''somestuff.method'', ''arg1'')); $client->call(''call'', array($session, ''somestuff.method'')); $client->call(''multiCall'', array($session, array( array(''somestuff.method'', ''arg1''), array(''somestuff.method'', array(''arg1'', ''arg2'')), array(''somestuff.method'') ) ) );

Me gustaría imitar el código php anterior en Android que llama a la función multiCall() del Magento.


Después de realizar una investigación larga, recibí una Solución a mitad de camino que llama al método multiCall() sin ningún Error , pero aún así no sé cómo obtener la respuesta del Server en una variable y usarla.

AnyOne que tenga conocimiento de ello puede Editar mi respuesta , le estaré agradecido.

El Code que he usado es:

Object[] skuid=new Object[product_list.size()]; Object calling[]=new Object[product_list.size()]; for(int m=0;m<product_list.size();m++) { skuid[m]=new Object[]{product_list.get(m).getp_Sku()}; calling[m]=new Object[]{"catalog_product_attribute_media.list",skuid[m]}; } try { client.callEx("multiCall",new Object[]{Utils.sessionId,calling}); } catch (XMLRPCException e) { e.printStackTrace(); }

Agradecimientos:

He trabajado en la respuesta publicada por Iain .


Primero inicie sesión de cualquier manera que funcione para llamar a catalog_product.list. Asegúrese de que session , client y product_ids tengan los valores correctos. Si no necesita iniciar sesión para estas operaciones, configure session = null (y si eso no funciona, intente no pasar la sesión :)). Entonces:

Object[][] calls = new Object[product_ids.length]; for (int i = 0; i < product_ids.length; i++) { calls[i] = new Object[] { "product_media.list", product_ids[i] }; } product_media_ids = client.call("multiCall", new Object[] { session, calls });

product_media_ids debería ser una matriz de matrices de imágenes de producto, es decir, cada elemento de product_media_ids será un valor de retorno de product_media.list .

El código no ha sido probado, me temo.