0

json リクエストで DDL レコードを取得する必要があります。Liferay コアにはそのようなサービスはありません。getRecordSet のみ。

新しいメソッドを追加する DDLRecordSetService フックを作成しgetRecords(recordSetId)ます。私のコード:

public class ExtDDLRecordSetLocalServiceImpl extends DDLRecordSetServiceWrapper {


   public ExtDDLRecordSetLocalServiceImpl(DDLRecordSetService ddlRecordSetService) {
       super(ddlRecordSetService);
   }

   public com.liferay.portlet.dynamicdatalists.model.DDLRecordSet getRecordSet(long recordSetId) throws com.liferay.portal.kernel.exception.PortalException, com.liferay.portal.kernel.exception.SystemException{

       System.out.println("------override getRecordSet ");
      DDLRecordSet set = super.getRecordSet(recordSetId+10);
        return set;
   }

   @JSONWebService
   public List<DDLRecord> getRecords(long recordSetId) throws SystemException, PortalException {
        System.out.println("------override getRecords");
        return   getRecordSet(recordSetId).getRecords();
   }

}

getRecordSet() をオーバーライドできますが、URL 経由で getRecordSet() メソッドにアクセスできません。

私は得る:

{"exception":"No JSON web service action associated with path /ddlrecordset/get-records and method GET for /"}

JSONWebService 経由で一連のレコードを返すことができる新しい DDLRecordSetService を追加するにはどうすればよいですか?

4

1 に答える 1

1

DDL 用の組み込み JSON サービスは、単なる get-record-set よりも機能が豊富です。ブラウザーでポータルの Web サービス API ページをポイントしてみてください。ログイン後、

/api/jsonws

DDLRecord には 7 つのメソッドがあり、DDLRecordSet にはさらに 8 つのメソッドがあります。

標準 API がニーズに合っているように思えます。

それ以外のことが判明した場合は...

JSON Web サービス メソッドは、サービス ビルダーの実行時に作成されます。これにより、メソッドが JSON、SOAP などの正しいオブジェクトにリバース エンジニアリングされます。

Service Builder を実行しないため、リバース エンジニアリングは発生しません。コア Liferay ソースでフック用に SB を実行することは、あなたが考えていることではないと思います (とにかく、それはお勧めできません。)

私の提案は、Service Builder を使用して独自のサービスを作成し、公開しようとしているサービス オブジェクトに対する独自の API を作成することです。この質問も参照してください

于 2013-04-18T13:58:41.137 に答える