0

ネイティブ Android アプリケーションからデータを投稿しようとしています。

ネイティブ コード:

WLProcedureInvocationData invocationData = new WLProcedureInvocationData("TaskAdapter", "updateTask");

int taskId = Integer.parseInt(tvTaskId.getText().toString());

String assignedTo = tvAssignedTo.getText().toString();

String address = "";

String description = "";

String latitude = "5.0";

String longitude = "5.0";

String status = "5.0";
String comments = "5.0";
String lastupdate = "5.0";
String userLatitude = "5.0";
String userLongitude = "5.0";
String userLocation = "5.0";
String photoData = "5.0";

Object[] parameters = new Object[]{
    taskId,
    assignedTo,
    description,
    address,
    latitude,
    longitude,
    status,
    comments,
    lastupdate,
    userLatitude,
    userLongitude,
    userLocation,
    photoData
};

invocationData.setParameters(parameters);

WLRequestOptions options = new WLRequestOptions();
options.setTimeout(30000);


client.getInstance().invokeProcedure(invocationData, new MyInvokeListener(), options);

アダプターコード:

function updateTask(id) {   
    var input = {
        method : 'PUT',
        returnedContentType : 'json',
        path : '/Api/Task?taskid=' + id
    };


    return WL.Server.invokeHttp(input);
}

アダプター XML:

<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed Materials - Property of IBM
5725-I43 (C) Copyright IBM Corp. 2011, 2013. All Rights Reserved.
US Government Users Restricted Rights - Use, duplication or
disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
-->
<wl:adapter name="TaskAdapter" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:wl="http://www.ibm.com/mfp/integration" xmlns:http="http://www.ibm.com/mfp/integration/http">

    <displayName>TaskAdapter</displayName>
    <description>TaskAdapter</description>
    <connectivity>
        <connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
            <protocol>http</protocol>
            <domain>testmeternative.vdot.virginia.gov</domain>
            <port>80</port>
            <connectionTimeoutInMilliseconds>30000</connectionTimeoutInMilliseconds>
            <socketTimeoutInMilliseconds>30000</socketTimeoutInMilliseconds>
            <maxConcurrentConnectionsPerNode>50</maxConcurrentConnectionsPerNode>

            <!-- Following properties used by adapter's key manager for choosing specific 
                certificate from key store <sslCertificateAlias></sslCertificateAlias> <sslCertificatePassword></sslCertificatePassword> -->
        </connectionPolicy>
    </connectivity>

    <procedure name="getAllTasks" />
    <procedure name="updateTask" />


</wl:adapter>

体を正しい方法で送信しているかどうかはわかりません。idさらに、 (パラメータ)をアダプタ関数に送信するにはどうすればよいですか。

Eclipse で [ Call Mobile First Adapter ] をクリックすると、プロシージャ名が表示されますが、REST 呼び出しの種類GETがドロップダウンに表示されPUTます。

4

2 に答える 2

1

次のようにアダプタ コードを更新する必要があります。

function updateTask(id, assignedTo, description, address, latitude, longitude,
        status, comments, lastupdate, userLatitude, userLongitude,
        userLocation, photoData) {

    var data = {
        "assignedTo" : assignedTo,
        "description" : description,
        "address" : address,
        "latitude" : latitude,
        "longitude" : longitude,
        "status" : status,
        "comments" : comments,
        "lastupdate" : lastupdate,
        "userLatitude" : userLongitude,
        "userLocation" : userLocation,
        "photoData" : photoData
    };

    var input = {
        method : 'PUT',
        returnedContentType : 'json',
        path : '/Api/Task?taskid=' + id,
        body : {
            contentType : 'application/json',
            content : data
        }
    };

    return WL.Server.invokeHttp(input);
}

ネイティブ コードを介してアダプタに値を渡しているため、invocationData.setParameters(parameters);アダプタは同じ数のパラメータを同じ順序で受け取ることになります。

ordataを除くこれらすべての値を含むオブジェクトを作成しました。これは、クエリパラメーターとして渡すためです。次に、バックエンド サービスがofを受け入れると想定しています。必要に応じて content-type を変更できます。idtaskIdContent-Typeapplication/json

于 2015-04-17T03:16:05.717 に答える
1

アプリがアダプターを呼び出す方法と、アダプターがバックエンドを呼び出す方法を区別してください。これらは別の概念です。

MFP/Worklight アダプターの以前のバージョンでは、HTTP GET を使用して呼び出されました。その後、アダプター自体が GET、PUT、または POST でバックエンドを呼び出した可能性がありますが、アプリは事実上 HTTP 経由で RPC 呼び出しを行っていました。

MFP バージョン 7.0 では、GET、PUT、POST、または DELETE を使用して呼び出すことができる RESTful アダプターを作成する機能が追加されました。これらのアダプターは、JAX/RS プログラミング モデルを使用して Java で実装されます。個々のプロシージャは、これらの HTTP "動詞" の 1 つを使用するものとしてマークされ、プロシージャを選択して Eclipse でテストすると、適切な GET/PUT/POST が提供されます。あなたの例では、単純な従来の JavaScript アダプターがあるため、GET のみを使用できます。それがテスト ツールによって提供されるものです。

Java RESTful アダプターを呼び出すには、動詞を指定します。このチュートリアルを参照してください:

Java RESTful アダプターの作成方法については、このチュートリアルを参照してください。

于 2015-04-17T07:17:19.113 に答える