0

Flash Builder 4.6プロジェクトでは、WebサイトのURLを参照するhttpサービスを定義しています。

私ができるようにしたいのは、アプリ内でWebサービスのURLをその場で変更することです。つまり、既存のURLをデフォルトとして使用しますが、管理者/設定画面を使用して、Webサービスが指す場所を変更します(sqliteデータベースまたはローカルメモリのいずれかに保存されます)。

これは、お客様が独自のバージョンのWebサイト/データベースをホストできるようにすると同時に、アプリストアからアプリを使用/ダウンロードできるようにするためです。

誰かがこれをした経験がありますか?

編集:以下のコメントの後にいくつかの詳細を追加します。

FlashBuilderウィザードを使用してHTTPサービスを作成すると、スーパークラスとスーパークラスから継承するサブクラスの2つのWebサービスクラスが作成されます。ウィザードが入力するすべてのコードは、スーパークラスに入ります。

入力する必要のあるコードはサブクラスにあると想定できます。しかし、どの関数をどのように配置するかはわかりません。

以下は、Superのコンストラクターのサンプルです。

// initialize service control
    _serviceControl = new mx.rpc.http.HTTPMultiService("websitehere");
     var operations:Array = new Array();
     var operation:mx.rpc.http.Operation;
     var argsArray:Array;

     operation = new mx.rpc.http.Operation(null, "loginRequest");
     operation.url = "login.php";
     operation.method = "GET";
     argsArray = new Array("un","pw");
     operation.argumentNames = argsArray;         
     operation.serializationFilter = serializer0;
     operation.properties = new Object();
     operation.properties["xPath"] = "/";
     operation.contentType = "application/x-www-form-urlencoded";
     operation.resultType = valueObjects.Data;
     operations.push(operation);
_serviceControl.operationList = operations;  

_serviceControl変数のどのプロパティを変更する必要があるかわかりません。

また、コードでWebサイトを検索すると、.modelディレクトリ内に.fmlファイルが返されます。このファイルは、ウィザードでサービスのURLを変更すると自動的に更新されるようです。これは問題を引き起こしませんか?

次に、ユーザー定義のURLにアクセスするという課題があります。アプリ内では、sqliteデータベースを使用してデータを保存しますが、ログインしているアカウントを知るためにも使用する「SharedObject」を使用する方がおそらく良いと思います。これはどれくらい信頼できますか?サービスを介してこれにアクセスできると思いますか?

厄介なのは、ログイン後にアクセスされる設定画面でこれを構成できるようにすることを計画していたことです。しかし、ログインするには、どのサーバーを指すかをすでに知っている必要があります。

4

2 に答える 2

1

質問を正しく読んでいる場合、主な目標は、ユーザー定義の変数に基づいてサービスのURLを動的に変更することです。

これは非常に簡単に実行でき、parsley/spicelibを使用している場合はさらに簡単に実行できます。

いくつかのポイント

  1. スーパーファイルのコードは変更しないでください。サービスが更新されるたびに上書きされます。生成されたサブクラスのすべてを変更します。

  2. 共有オブジェクトは、少量のデータには非常に適していますが、大規模なデータセット、つまり大きな配列コレクションの保存には使用しないでください。

とにかくここに私がこれを達成する方法があります。

サブクラスでは、コンストラクター関数を変更できます。

これが設定変数に基づいてURLを変更する方法ですが、代わりにSharedObjectを同じように簡単に使用できます。

public function SubClassConstructor(){
    if(CONFIG::DOMAIN_IDENT == "development" || CONFIG::DOMAIN_IDENT == "dev" || CONFIG::DOMAIN_IDENT == "d"){
        _serviceControl.endpoint = "http://yoururl1";
    }
    else if(CONFIG::DOMAIN_IDENT == "production" || CONFIG::DOMAIN_IDENT == "prod" || CONFIG::DOMAIN_IDENT == "p"){
        _serviceControl.endpoint = "http://yoururl2";
    }

} 

もちろん、これはあなたが探しているものではありませんが、実用的なソリューションです。もちろん、グローバルApplicationModelへのバインディングを使用するか、SharedObjectへの直接参照を使用できます。SharedObjectの使用方法はすでに知っていると思います。

さらにヘルプやガイダンスが必要かどうかを尋ねます。

于 2012-07-06T05:05:03.697 に答える
0

cghrmauritiusのソリューションは私にはうまく機能しなかったので、私は自分の状況で機能した最終的なソリューションを投稿しています。

public function subConstructor()
{
    super();
    _serviceControl.baseURL = "http://url1";
}

明らかに、私の最終的な解決策では、shareobjectも実装する必要がありますが、URLのオーバーライドが私の最優先事項でした。

于 2012-07-27T10:54:21.843 に答える