チュートリアル:RAD サーバー クライアント アプリケーションを使用して RAD サーバー ユーザーを管理する
データベースおよび LiveBinding のチュートリアル への移動
このチュートリアルでは、EMS サーバーに登録された EMS ユーザーを管理することができます。
ここでは、新しい EMS ユーザーを登録したり、既存の EMS ユーザーとして EMS サーバーにログインするための、簡単な EMS クライアント アプリケーションを作成します。この EMS ユーザー管理クライアント アプリケーションを使用して、EMS ユーザー情報の取得、更新、および削除を行うことができます。
このチュートリアルでは、以下を行います。
- TBackendAuth コンポーネントを使用して、EMS サーバーでの EMS クライアント アプリケーションの認証を行う。
- TBackendQuery コンポーネントを使用して、EMS サーバーから EMS ユーザーを取得する。
- TBackendUsers コンポーネントを使用して、EMS サーバー内の EMS ユーザーの管理(作成、更新、削除)を行う。
目次
EMS クライアント アプリケーションの作成
- Delphi または C++ の空のマルチデバイス アプリケーションを作成します。以下を選択してください。
- [ファイル|新規作成|マルチデバイス アプリケーション - Delphi|空のアプリケーション]
- [ファイル|新規作成|マルチデバイス アプリケーション - C++Builder|空のアプリケーション]
- TForm に新しい TTabControl コンポーネントをドロップします。
- [オブジェクト インスペクタ]で、Align プロパティを Client に設定します。
- 新しい TTabItem を TTabControl に追加します。
- TTabControl コンポーネントを右クリックし、[項目の追加|TTabItem]を選択します。
- [オブジェクト インスペクタ]で、TTabItem の以下のプロパティを変更します。
- フォームの Caption プロパティを「EMS Users Management」に変更します。
- アプリケーションのタイトルを「EMS Users Management」に変更します。
- Delphi の場合:
Application.Title := 'EMS Users Management';
- C++ の場合:
Application->Title = "EMS Users Management";
- TForm に TEMSProvider コンポーネントをドロップします。
- [オブジェクト インスペクタ]で、EMS サーバーのパラメータを次のように構成します。
- URLhost:
localhost
- URLPort:
8080
- URLhost:
- [接続テスト]ボタンをクリックします。接続が正しくセットアップされていれば、EMS サーバーの現在のバージョンを示すメッセージが出力されます。
既存 EMS ユーザーの EMS サーバーへのログイン
TBackendAuth コンポーネントを使用して、アプリケーションから EMS サーバーにログインします。それには、既存 EMS ユーザーの名前とパスワードが必要です。
- 新しい TLayout コンポーネントを LogInTab に追加し、Name を「LayoutLogIn」に変更します。
- TBackendAuth コンポーネントをフォームにドロップし、Name プロパティを「BackendAuthLogin」に変更します。
- [LiveBinding デザイナ]を開き、ユーザー名およびパスワードを編集できるコンポーネントを作成して、それを TBackendAuth コンポーネントにリンクします。手順は以下のとおりです。
- BackendAuthLogin の UserName フィールドを右クリックし、[新規コントロールにリンク...]を選択し、TEdit を選択して[OK]ボタンをクリックします。
- BackendAuthLogin の Password フィールドを右クリックし、[新規コントロールにリンク...]を選択し、TEdit を選択して[OK]ボタンをクリックします。
- [構造]ビューで、EditUserName コンポーネントと EditPassword コンポーネントを LayoutLogin コンポーネントに移動します。
- TButton を LayoutLogin に追加し、Name プロパティを「LogIn」に変更します。
- LogIn ボタンをダブルクリックして OnClick イベントを作成します。
- LogIn ボタンの OnClick イベントのイベント ハンドラを実装し、EMS ユーザーが EMS サーバーにログインできるようにします。
- Delphi の場合:
procedure TForm1.LogInClick(Sender: TObject); begin try BackendAuthLogin.LogIn; Except on E: Exception do begin ShowMessage('Connection to EMS Server failed'); end; end; end;
- C++ の場合:
void __fastcall TForm1::LogInClick(TObject *Sender) { try { BackendAuthLogin->Login(); } catch (System::Sysutils::Exception &e) { ShowMessage("Connection to EMS Server failed"); } }
EMS サーバーからのログアウト
TBackendAuth コンポーネントを使用して、ログインしている EMS ユーザーを EMS サーバーからログアウトさせます。EMS ユーザーが問題なく EMS サーバーにログインしている間、LayoutLogin は非表示になっています。
- TLayout コンポーネントを LogInTab に追加し、Name プロパティを「LayoutLogOut」に変更します。
- 新しい TButton を LayoutLogOut に追加し、Name プロパティを「LogOut」に変更します。
- LogOut ボタンをダブルクリックして OnClick イベントを作成します。
- イベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.LogOutClick(Sender: TObject); begin BackendAuthLogin.Logout; end;
- C++ の場合:
void __fastcall TForm1::LogOutClick(TObject *Sender) { BackendAuthLogin->Logout(); }
- EMS ユーザーのログイン状態に応じて LogIn レイアウトおよび LogOut レイアウトを表示または非表示にするメソッドを作成します。
- コードの private セクションに ShowLogin メソッドを作成します。
- Delphi の場合:
private procedure ShowLogin;
- C++ の場合:
private: // User declarations void __fastcall ShowLogin();
- ヒント: Ctrl+Shift+C を押すと、コードの自動補完が行われます。
- ShowLogin メソッドに以下のコードを追加します。
- Delphi の場合:
procedure TForm1.ShowLogin; begin LayoutLogOut.Position := LayoutLogIn.Position; LayoutLogIn.Visible := not BackendAuthLogin.LoggedIn; LayoutLogOut.Visible := BackendAuthLogin.LoggedIn; end;
- C++ の場合:
void __fastcall TForm1::ShowLogin() { LayoutLogOut->Position = LayoutLogIn->Position; LayoutLogIn->Visible = !BackendAuthLogin->LoggedIn; LayoutLogOut->Visible = BackendAuthLogin->LoggedIn; }
- フォームの OnCreate イベントで ShowLogin メソッドを呼び出します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.FormCreate(Sender: TObject); begin ShowLogin; end;
- C++ の場合:
void __fastcall TForm1::FormCreate(TObject *Sender) { ShowLogin(); }
-
フォームの LayoutLogOut コンポーネントに、TLabel を 2 つ追加します。
- Label1 の Text プロパティを「User Name」に変更します。
- Label2 の Name プロパティを「LoggedUser」に変更します。
- [LiveBinding デザイナ]で、BackendAuthLogin コンポーネントの UserName フィールドを LoggedUser ラベルにリンクします。
- フォームの BackendAuthLogin コンポーネントの OnLoggedIn イベントと OnLoggedOut イベントを作成します。
- [オブジェクト インスペクタ]で[イベント]タブを開き、OnLoggedIn イベントと OnLoggedOut イベントをダブルクリックします。
- イベントを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.BackendAuthLoginLoggedIn(Sender: TObject); begin ShowLogin; end; procedure TForm1.BackendAuthLoginLoggedOut(Sender: TObject); begin BackendAuthLogin.ClearFieldValues; ShowLogin; end;
- C++ の場合:
void __fastcall TForm1::BackendAuthLoginLoggedIn(TObject *Sender) { ShowLogin(); } // --------------------------------------------------------------------------- void __fastcall TForm1::BackendAuthLoginLoggedOut(TObject *Sender) { BackendAuthLogin->ClearFieldValues(); ShowLogin(); }
EMS サーバーへの新規 EMS ユーザーの登録
このアプリケーションには別のタブがあり、新しい EMS ユーザーを EMS サーバーに登録することができます。このタブを Signup タブと呼びます。
- [構造]ビューで、TabControl を右クリックし、[項目の追加|TTabItem]を選択します。
- [オブジェクト インスペクタ]で、TTabItem の以下のプロパティを変更します。
- TBackendAuth コンポーネントをフォームに追加し、Name プロパティを「BackendAuthSignup」に変更します。BackendAuthSignup を使用して新しい EMS ユーザーを EMS サーバーに登録します。
- [LiveBinding デザイナ]を開きます。
- BackendAuthSignup の UserName フィールドを右クリックし、[新規コントロールにリンク...]を選択し、TEdit を選択して[OK]ボタンをクリックします。
- BackendAuthSignup の Password フィールドを右クリックし、[新規コントロールにリンク...]を選択し、TEdit を選択して[OK]ボタンをクリックします。
- [構造]ビューで、EditUserName2 コンポーネントと EditPassword2 コンポーネントを SignUpTab コンポーネントに移動します。
- EMS クライアント アプリケーションによって新規作成される EMS ユーザーに、カスタム詳細情報を追加します。[構造]ビューで BackendAuthSignup コンポーネントを選択します。
- [オブジェクト インスペクタ]で、BackendAuthSignup の UserDetails プロパティの参照([...])ボタンをクリックし、新しい項目を追加します。
- [オブジェクト インスペクタ]で、新しい項目の Name プロパティを「email」に変更します。
- [LiveBinding デザイナ]で、ユーザー詳細情報 email を新しい TEdit コントロールにリンクします。
- [構造]ビューで、EditUserDetailemail コンポーネントを SignUpTab コンポーネントに移動します。
- SignUpTab に新しい TButton コンポーネントを追加し、以下を行います。
- Name プロパティを「SignUp」に変更します。
- SignUp ボタンをダブルクリックして、OnClick イベントを作成します。
- SignUp ボタンの OnClick イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.SignUpClick(Sender: TObject); begin BackendAuthSignup.Signup; end;
- C++ の場合:
void __fastcall TForm1::SignUpClick(TObject *Sender) { BackendAuthSignup->Signup(); }
- SignUpTab を表示するのは、EMS ユーザーが EMS サーバーにログインしている場合だけです。そのために、次のコードを ShowLogin メソッドに追加します。
- Delphi の場合:
procedure TForm1.ShowLogin; begin // previous code goes here SignUpTab.Visible := BackendAuthLogin.LoggedIn; end;
- C++ の場合:
void __fastcall TForm1::ShowLogin() { //previous code goes here SignUpTab->Visible = BackendAuthLogin->LoggedIn; }
- [オブジェクト インスペクタ]で[イベント]タブを開き、OnSignedUp イベントをダブルクリックします。
- BackendAuthSignup コンポーネントの OnSignedUp イベントのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.BackendAuthSignupSignedUp(Sender: TObject); begin EditUserName2.Text:= ''; EditPassword2.Text:=''; EditUserDetailemail.Text:= ''; end;
- C++ の場合:
void __fastcall TForm1::BackendAuthSignupSignedUp(TObject *Sender) { EditUserName2->Text = ""; EditPassword2->Text = ""; EditUserDetailemail->Text = ""; }
EMS サーバーからの EMS ユーザー リストの取得
EMS クライアント アプリケーションで、EMS サーバーから現在の EMS ユーザー リストを取得します。
- TBackendQuery コンポーネントをフォームにドロップします。
- [オブジェクト インスペクタ]で、TBackendQuery の BackendService プロパティに[Users]を選択します。
- LogIntTab に TLayout コンポーネントを追加し、Name プロパティを「LayoutUsers」に変更します。
- TListView コンポーネントを LayoutUsers にドロップします。[オブジェクト インスペクタ]で ItemAppearance プロパティを展開し、ItemAppearance に ImageListItemBottomDetail を選択します。
- LayoutUsers に新しい TButton コンポーネントを追加し、Name プロパティを「GetUsers」に変更します。この GetUsers ボタンは BackendQuery を実行するためのものです。
- GetUsers ボタンの OnClick イベントを作成し、そのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.GetUsersClick(Sender: TObject); begin BackendQuery1.ClearResult; BackendQuery1.Execute; UpdateListUsers(BackendQuery1.JSONResult); end;
- C++ の場合:
void __fastcall TForm1::GetUsersClick(TObject *Sender) { BackendQuery1->ClearResult(); BackendQuery1->Execute(); UpdateListUsers(BackendQuery1->JSONResult); }
- UpdateListUsers メソッドを作成および実装します。
- コードの private セクションでメソッドを宣言します。
- Delphi の場合:
procedure UpdateListUsers(AUsers: TJSONArray);
- C++ の場合:
private: // User declarations //previous code goes here void __fastcall UpdateListUsers(TJSONArray *AUsers);
- メソッドを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.UpdateListUsers(AUsers: TJSONArray); var I: Integer; LUser: TJSONValue; LUsername: String; _id: String; item: TListViewItem; begin ListView1.ClearItems; ListView1.Visible := true; for I := 0 to AUsers.Count - 1 do begin item := ListView1.Items.Add; LUser := AUsers.Items[I]; LUsername := LUser.GetValue<string>('username'); _id := LUser.GetValue<string>('_id'); item.text := LUsername; item.Detail := _id; end; end;
- C++ の場合:
void __fastcall TForm1::UpdateListUsers(TJSONArray *AUsers) { Integer I; TJSONValue *LUser; String LUsername; String _id; TListViewItem *item; ListView1->ClearItems(); ListView1->Visible = true; for (I = 0; I < AUsers->Count; I++) { item = ListView1->Items->Add(); LUser = AUsers->Items[I]; LUsername = static_cast<TJSONObject*>(LUser)->Get("username")->JsonValue->Value(); _id = static_cast<TJSONObject*>(LUser)->Get("_id")->JsonValue->Value(); item->Text = LUsername; item->Detail = _id; } }
- EMS ユーザーが問題なく EMS サーバーにログインしている場合にだけ、LayoutUsers を表示します。ShowUsersLayout メソッドを作成して実装します。
- コードの private セクションでメソッドを宣言します。
- Delphi の場合:
private // Previous code goes here Procedure ShowUsersLayout;
- C++ の場合:
private: // User declarations //previous code goes here void __fastcall ShowUsersLayout();
- ShowUsersLayout メソッドを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.ShowUsersLayout; begin LayoutUsers.Visible := BackendAuthLogin.LoggedIn; ListView1.Visible := false; end;
- C++ の場合:
void __fastcall TForm1::ShowUsersLayout() { LayoutUsers->Visible = BackendAuthLogin->LoggedIn; ListView1->Visible = false; }
- OnLoggedIn、OnLoggedOut、OnCreate の各イベント ハンドラで ShowUsersLayout メソッドを呼び出します。
- OnSignedUp イベント ハンドラで GetUsers メソッドを呼び出します。
- Delphi の場合:
procedure TForm1.BackendAuthSignupSignedUp(Sender: TObject); begin //Previous code goes here GetUsersClick(nil); end;
- C++ の場合:
void __fastcall TForm1::BackendAuthSignupSignedUp(TObject *Sender) { //previous code goes here GetUsersClick(NULL); }
EMS サーバーに格納された EMS ユーザー パスワードの更新
この EMS クライアント アプリケーションでは、EMS サーバーに格納された EMS ユーザー パスワードを更新することができます。
- TBackendUsers コンポーネントをフォームにドロップします。
- 以下のコンポーネントを LayoutUsers に追加し、Name プロパティをそれぞれ次のように変更します。
- UpdatePassword ボタンの OnClick イベントを作成し、そのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.UpdatePasswordClick(Sender: TObject); var LEditedUser: TJSONObject; LUpdatedAt: TBackendEntityValue; begin try if ListView1.Selected <> nil then begin LEditedUser := TJSONObject.Create; LEditedUser.AddPair('password',editedPassword.Text); BackendUsers1.Users.UpdateUser(TListViewItem(ListView1.Selected).Detail,LEditedUser,LUpdatedAt); editedPassword.Text:=''; end; finally LEditedUser.Free; end; end;
- C++ の場合:
void __fastcall TForm4::UpdatePasswordClick(TObject *Sender) { TJSONObject *LEditedUser = 0; TBackendEntityValue LUpdatedAt; try { if (ListView1->Selected != NULL) { LEditedUser = new TJSONObject; LEditedUser->AddPair("password", editedPassword->Text); BackendUsers1->Users->UpdateUser(((TListViewItem*)(ListView1->Selected))->Detail,LEditedUser, LUpdatedAt); editedPassword->Text = ""; } } __finally { delete LEditedUser; } }
- ShowUsersButtons メソッドを作成し、リストから選択した EMS ユーザーを更新するためのフィールドを表示するよう実装します。
- コードの private セクションでメソッドを宣言します。
- Delphi の場合:
private // Previous code goes here Procedure ShowUserButtons;
- C++ の場合:
private: // User declarations //Previous code goes here void __fastcall ShowUserButtons();
- ShowUsersButtons メソッドを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.ShowUserButtons; begin NewPassword.Visible:= true; editedPassword.Visible:=true; UpdatePassword.Visible := true; end;
- C++ の場合:
void __fastcall TForm1::ShowUserButtons() { NewPassword->Visible = true; editedPassword->Visible = true; UpdatePassword->Visible = true; }
- 以下のコードを ShowUsersLayout メソッドの実装に追加します。
- Delphi の場合:
procedure TForm1.ShowUsersLayout; begin //Previous code goes here NewPassword.Visible:= false; editedPassword.Visible:=false; UpdatePassword.Visible := false; end;
- C++ の場合:
void __fastcall TForm1::ShowUsersLayout() { //Previous code goes here NewPassword->Visible = false; editedPassword->Visible = false; UpdatePassword->Visible = false; }
- UpdateListUsers メソッドの最後で ShowUsersButtons メソッドを呼び出します。
EMS サーバーからの EMS ユーザーの削除
EMS クライアント アプリケーションで、選択した EMS ユーザーを EMS サーバーから削除します。
- LayoutUsers に新しい TButton コンポーネントを追加し、Name プロパティを「DeleteUser」に変更します。
- DeleteUser ボタンの OnClick イベントを作成し、そのイベント ハンドラを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.DeleteUserClick(Sender: TObject); begin if ListView1.Selected <> nil then begin BackendUsers1.Users.DeleteUser(TListViewItem(ListView1.Selected).Detail); end; GetUsersClick(nil); end;
- C++ の場合:
void __fastcall TForm1::DeleteUserClick(TObject *Sender) { if (ListView1->Selected != NULL) { BackendUsers1->Users->DeleteUser(((TListViewItem*)(ListView1->Selected))->Detail); } GetUsersClick(NULL); }
- ShowUsersButtons メソッドを実装します。次のコードを追加します。
- Delphi の場合:
procedure TForm1.ShowUserButtons; begin //previous code goes here UpdatePassword.Visible := true; end;
- C++ の場合:
void __fastcall TForm1::ShowUserButtons() { DeleteUser->Visible = true; }
- 以下のコードを ShowUsersLayout メソッドの実装に追加します。
- Delphi の場合:
procedure TForm1.ShowUsersLayout; begin //Previous code goes here DeleteUser.Visible := false; end;
- C++ の場合:
void __fastcall TForm1::ShowUsersLayout() { //Previous code goes here DeleteUser->Visible = false; }
アプリケーションの実行
この時点で、アプリケーションを実行し、EMS サーバーの EMS ユーザーを管理することができます。ログインするには既存の EMS ユーザーが必要です。
アプリケーションを実行するには、F9 キーを押すか、[実行|実行]を選択します。
関連項目
- エンタープライズ モビリティ サービス(EMS)
- EMS サーバー
- EMS ユーザー リソース
- EMS クライアント アプリケーション
- チュートリアル:初めての EMS クライアント アプリケーションを実装する
- EMS サーバーの権限付与
- RAD Studio での LiveBinding
- [LiveBinding デザイナ]
- フォーム デザイナ
- [構造]ビュー
- REST.Backend.ServiceComponents.TBackendUsers
- REST.Backend.ServiceComponents.TBackendAuth
- REST.Backend.ServiceComponents.TBackendQuery