Невозможно добавить сведения о продукте при создании новой цитаты

Я разрабатываю приложение для Android для создания новой цитаты в CRM-сервере vTiger (ver 5.4).

Мне удалось создать новую цитату, но product_id и количество, которое я отправил для добавления в детали цитаты, не были добавлены в нее. Другие детали отображаются в новой цитате, кроме списка продуктов, их количества и цены.

Я также изучил учебник по веб-сервисам vTiger, но в этом случае он не помог.

Я нашел приемлемый ответ аналогичного вопроса, но он находится в php не в Android/JAVA .

Вот как я отправляю детали, необходимые для создания новой цитаты на сервере vTiger .:-

  try { objectJson.put("subject", subject); objectJson.put("account_id", accountId); objectJson.put("bill_street", address); objectJson.put("assigned_user_id", "19x1"); objectJson.put("conversion_rate", "1.000"); objectJson.put("currency_id", "21x1"); objectJson.put("hdnTaxType", "group"); objectJson.put("productid", productId); objectJson.put("quantity", quantity); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } String data = null; try { data = URLEncoder.encode("sessionName", "UTF-8") + "=" + URLEncoder.encode(sessionId, "UTF-8"); data += "&" + URLEncoder.encode("element", "UTF-8") + "=" + URLEncoder.encode(objectJson.toString(), "ISO-8859-1"); data += "&" + URLEncoder.encode("elementType", "UTF-8") + "=" + URLEncoder.encode(moduleName, "UTF-8"); //moduleName='Quotes' } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } String text = ""; BufferedReader reader=null; // Send data try { // Defined URL where to send data URL url = new URL("http://vtiger_url/webservice.php?operation=create"); // Send POST data request URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write( data ); wr.flush(); } catch(Exception ex) { } 

Вышеприведенный код помогает мне генерировать цитату без сведений о продукте.

Изучив вышеупомянутый ответ php , я изменил URL-адрес, который я использовал в своем коде: http://vtiger_url/webservice.php?total=23000&operation=create . Это помогло мне добавить общую сумму к недавно созданной котировке, но мне не удалось добавить остальные детали, используя этот метод.

Ответ, который вы нашли, кажется подходящим, даже если это решение php. Проблема, которую вы опустили:

Я тоже пробовал это, но, к сожалению, я не могу получить доступ к таблице Inventoryproductrel.

Возможно, уже указывает на отсутствие надлежащей аутентификации или отсутствующих привилегий. Поэтому мое предложение

  1. Узнайте, почему вы не можете получить доступ к таблице Inventoryproductrel . Попытайтесь получить доступ к этой таблице с помощью ваших прав на аутентификацию (sessionID), изучить ответ на любые подсказки и попытаться решить эту проблему.
  2. Наконец, следуйте рекомендациям этого ответа .

Еще один намек. Если вы можете успешно получить доступ к этой таблице через веб-браузер, я бы понюхал запрос и посмотрел параметры http и их значения. Основываясь на этих выводах, вы можете изменить свой запрос. Всегда считайте, что веб-браузер может делать то же самое, что и приложение Android.

Эти строки были добавлены в существующий код: –

 JSONArray pdoInformation = new JSONArray(); try{ // Added these lines in try block to send product details for(int i=0; i<productIds.size(); i++) { JSONObject obj = new JSONObject(); obj.put("productid", productIds.get(i) ); obj.put("qty", quantities.get(i)); obj.put("listprice", listprices.get(i)); pdoInformation.put(obj); } objectJson.put("pdoInformation", pdoInformation); } 

Здесь необходимо было JSONArray детали продукта для отправки в JSONArray с именем "pdoInformation" .

For loop используется для отправки нескольких деталей продукта.

Здесь productIds , quantities и listprices – это три обязательные данные о продукте, хранящиеся как ArrayList .

Почему вы не используете веб-сервис для создания продуктов? Это должно поддерживаться в соответствии с документацией. Когда вы создаете продукты и получаете их идентификаторы, вы можете создать объект цитаты, который включает эти идентификаторы. Объекты и их поля не очень хорошо документированы для остальных API-интерфейсов, поэтому вы можете использовать API запросов / описаний, чтобы получить как можно больше информации о том, какие данные необходимо предоставить для создания разных объектов. Из описания модуля «Котировки» вам нужно будет указать item_details, который будет содержать информацию о продукте и количестве. Точное имя и формат поля можно получить с помощью описательного API, как описано в документации веб-службы

Чтобы получить описание объектов vTiger

 String modeleName = "Quotes"; //Use Products if you want a description of the Products module String data = null; try { data = URLEncoder.encode("sessionName", "UTF-8") + "=" + URLEncoder.encode(sessionId, "UTF-8"); data += "&" + URLEncoder.encode("elementType", "UTF-8") + "=" + URLEncoder.encode(moduleName, "UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } String text = ""; BufferedReader reader=null; System.out.println(data); // Send data try { // Defined URL where to send data URL url = new URL("http://vtiger_url/webservice.php?operation=describeobject"); // Send GET data request URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write( data ); wr.flush(); } catch(Exception ex) { } 

Обратите внимание, что это в значительной степени то же самое, что и вы, только URL и параметры различны, а тип запроса – GET вместо POST. Чтобы создать продукт, вы будете следовать той же процедуре, что и для цитаты, только Url и параметры будут разными

@help Насколько я понимаю, ваш вопрос заключается в том, как отправить JsonObject с данными на указанный сервер, это правильно? Если это правильно, я предлагаю вам использовать библиотеку Volley для работы в сети, и вот много примеров, которые могут вам пригодиться. http://arnab.ch/blog/2013/08/asynchronous-http-requests-in-android-using-volley/ и http://www.androidhive.info/2014/05/android-working-with-volley -library-1 /

Просто пройдите через это. Он обеспечивает самый простой способ выполнения сетевых операций, а также отмену запроса также возможна в этой библиотеке.

Образец кода:

 final String URL = "SERVER_URL"; // Post params to be sent to the server HashMap<String, String> params = new HashMap<String, String>(); params.put("token", "AbCdEfGh123456"); JsonObjectRequest req = new JsonObjectRequest(URL, new JSONObject(params), new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { VolleyLog.v("Response:%n %s", response.toString(4)); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { VolleyLog.e("Error: ", error.getMessage()); } }); // add the request object to the queue to be executed ApplicationController.getInstance().addToRequestQueue(req); 

Используя этот код, вы можете отправить свои данные на свой сервер и на стороне сервера, вы можете использовать php-код для получения этой jsondata и ее анализа.

Благодарю.

Intereting Posts
Как я могу предотвратить автоматическую блокировку Android, пока активность (приложение) находится в фокусе? Как добавить несколько просмотров в оконный менеджер в Android Android WebView – настройка фокуса фокуса HTML с использованием Javascript Как захватить данные с помощью разъема для наушников и какой тип разъема для данных? View Pager – как я могу разместить на нем фиксированные кнопки Как получить ссылку на активность в классе View? Как программно изменить цель ImageButton src при выполнении условия? Как я могу что-то сделать перед удалением моего приложения для Android? Android – высота макета кадра, не соответствующая компоновке координатора Как просмотреть файл Realm в браузере Realm? Я загрузил Android 2.2.2, используя команду gradle 2.14.1 gradle для компиляции проекта, но не удалось? Поддержка Android-v7-appcompat с 4.0 и выше Программно установить цвет текста в основное андроидное текстовое изображение Анализ файла манифеста Android для поиска тега uses-permission с использованием python Keep Action Bar Стабильный во время анимации перехода на активность