Как разместить данные с помощью REST API в комплекте crm - PullRequest
0 голосов
/ 18 мая 2018

Это мой rest.php файл

<?php
chdir('../../..');

require_once 'SugarWebServiceImplv4_1_custom.php';

$webservice_path = 'service/core/SugarRestService.php';
$webservice_class = 'SugarRestService';
$webservice_impl_class = 'SugarWebServiceImplv4_1_custom';
$registry_path = 'custom/service/v4_1_custom/registry.php';
$registry_class = 'registry_v4_1_custom';
$location = 'custom/service/v4_1_custom/rest.php';

require_once 'service/core/webservice.php';

Это мой файл SugarWebServiceImplv4_1_custom.php, в котором я написал собственные методы

<?php

header("Access-Control-Allow-Origin: *");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

if(!defined('sugarEntry')){
  define('sugarEntry', true);
}
require_once 'service/v4_1/SugarWebServiceImplv4_1.php';

class SugarWebServiceImplv4_1_custom extends SugarWebServiceImplv4_1
{ 
    public function custom_test($username)
    {
         $arr = array ('a'=>$username,'b'=>22,'c'=>32,'d'=>44,'e'=>55);

         return json_encode($arr);
        die;
    }
}

Это мой файл registry.php, где язарегистрировали мой пользовательский метод

<?php
    require_once 'service/v4_1/registry.php';
    class registry_v4_1_custom extends registry_v4_1
    {
        protected function registerFunction()
        {
            parent::registerFunction();

              $this->serviceClass->registerFunction('custom_test',
                                                  array(
                                                    'username'=>'xsd:string),
                                                  array(
                                                    'return'=>'tns:get_array')
                                                  );


        }
    }

Проблема в том, что когда я передаю данные через метод get, как этот

http://www.example.com/custom/service/v4_1_custom/rest.php?method=custom_test&input_type=json&response_type=json&rest_data=

{"username": "some username"}

Я получаю результат, но я не знаю, как передать его через метод post через приложение IOS.Я пытался передать это, но я ничего не получаю в имени пользователя.Я также проверил ответ через curl, он работает с использованием curl, но мне нужно подключить его к IOS.Буду признателен за помощь,это обычный api-файл rest для отправки запросов rest api.

restApi(method,url,data) {

      console.log("inside restApi");


    switch(method) {
      case 'post' : { 
                    console.log("Inside Post Method");
                    /*
                    return this.httpClient.post(url,data)
                    .subscribe(
                      (res:any) => {
                        console.log("POST response below");
                        console.log(res.username);
                        this.responseData = JSON.stringify(res);
                        console.log("ResponseData Value");
                        console.log(this.responseData);

                        return this.responseData;
                      }); */

                     let headers = new Headers({'content-type':'application/json'});
                     let options = new RequestOptions({ headers:this.headers });
                     this.responseFromFunction = this.http.post(url,data).toPromise()
                     .then(this.extractData)
                     .catch(this.handleError);

                     break; 

      }

      case 'get' : {
                    console.log("Inside Get Method");
                    let headers = new Headers({'content-type':'application/json'});
                    let options = new RequestOptions({ headers:this.headers });
                    this.responseFromFunction = this.http.get(url, options).toPromise()
                    .then(this.extractData)
                    .catch(this.handleError);
                    break;
      }

      case 'put' : {
                    console.log("Inside Put Method");
                    this.responseFromFunction = this.httpClient.put(url,data)
                    .subscribe((res:any) => {
                      console.log(res);
                    });
                    break;
      }

      case 'delete' : {
                        console.log("Inside Delete Method");
                        this.responseFromFunction = this.httpClient.delete(url)
                        .subscribe((res:any) => {
                          console.log(res);
                        });
                        break;

      }

      default : {
                    this.responseFromFunction = {"message":"error"};
                console.log("Unknow Method Entered. Or write method in small lowercase only"); 
                // return "Invalid Method";
                }
    }
    console.log("Outside switch case");
    console.log(this.responseFromFunction);
    return this.responseFromFunction;
  }

  private extractData(res: Response) {
  //  console.log("Resp :", res.json());
  //  console.log("Stringy :", JSON.stringify(res));
    return res.json();

  }

  private handleError(error: any): Promise<any> {
    console.error('An error occurred', error);
    return Promise.reject(error.message || error);
  }

}

вот ответ почтальона enter image description here

Я не понимаю, как передать имя пользователяв rest_data

1 Ответ

0 голосов
/ 18 мая 2018

ЕСЛИ вы используете Angular 5, то:

Документация прочитайте ее

Создание запроса POST

Приложения частоОтправка данных на сервер.Они отправляют при отправке формы.В следующем примере служба HeroesService публикует сообщения о добавлении героя в базу данных.app / heroes / heroes.service.ts (addHero)

/** POST: add a new hero to the database */
addHero (hero: Hero): Observable<Hero> {
  return this.http.post<Hero>(this.heroesUrl, hero, httpOptions)
    .pipe(
      catchError(this.handleError('addHero', hero))
    );
}

Метод HttpClient.post() похож на get () в том, что он имеет параметр типа (вы ожидаете, что сервер вернет новыйгероя) и получает URL ресурса.

Требуется еще два параметра:

hero - the data to POST in the body of the request.
`httpOptions` - the method options which, in this case, specify required headers.

Конечно, он ловит ошибки почти так же, как описано выше.

HeroesComponent инициирует фактическую операцию POST, подписавшись на Observable, возвращаемое этим методом обслуживания.app / heroes / heroes.component.ts (addHero)

this.heroesService.addHero(newHero)
  .subscribe(hero => this.heroes.push(hero));

Когда сервер успешно отвечает вновь добавленным героем, компонент добавляет этого героя в отображаемый список героев.

Отредактированный ответ:

Я видел ваш скриншот почтальона вы передаете имя пользователя

Эта ссылка поможет вам

...