2011-07-29 13 views
3

データ定義のCookbookの内容に基づいていくつかの簡単なコマンドを作成しました。このコマンドでは、ユーザーインタラクションがアイテム - >挿入 - > MyCommandを右クリックして、「本当にこれをやりたいですか? 。それは素晴らしいことです。ユーザーとの対話のためにSitecore ShowControlPopupを使用するにはどうすればよいですか?

今、ダイアログボックスでユーザーと少しでもやりとりするためのコマンドが必要です。ユーザーがオプションを選択できるようにラジオボタンリストを追加し、コマンドを実行するボタンを追加する必要があります。私はこれのためにShowControlPopupを使う必要があると思う。私はポップアップがどのように見えるかを定義するためのコントロール(ascx)を作成しました(そして、それがSitecoreの基本的なコントロールとして動作することを確認するテストバージョンを公開しました)。しかし、私はShowControlPopupのパラメータが何であるか正確にはわかりません。

最初のparateredは "Id"と呼ばれます。ここには何を入れますか?ポップアップコントロールを使用するアイテムのIDですか?

第2パラメータは「where」です。ポップアップに表示されるURLを推測しています。コンテンツアイテムはここに存在する必要がありますか、それとも単にダミーURLですか?

3番目のパラメータは「controlId」と呼ばれます。ここにはどのようなIDを入れますか?ポップアップを定義する私のコントロールのidを試しましたが、コントロールが見つからないというエラーが表示されます。

ユーザがダイアログボックスでオプションを選択して「ok」をクリックすると、そのイベントを処理するものは何ですか?コマンドクラスのRunメソッドまたはポップアップコントロールのコードビヘイビア内のイベントハンドラ?

これまでのコードです。失敗した場合は、IDを指定してアイテムを見つけることができないというエラーのコントロールを作成しようとします。ポップアップコントロールが知りたいアイテムを推測しました。

protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args) 
{ 
if (args.IsPostBack) 
{ 
    if (args.HasResult) 
    { // normally code here would run when the dialog box is completed by the user. Is that so in this case? 

    } 
} 
else 
{ 
    Sitecore.Context.ClientPage.ClientResponse.ShowControlPopup("F3684C4C-D9EF-4796-A471-5B05553119B6", 
       "http://mysite/dummy.aspx", 
       "B8D503D0-AEBE-43AE-B924-C3849F03E90D"); 

    args.WaitForPostBack(); 
} 
} 

乾杯、

ジェームズ。

サイトコア6.2 REV 091012/Win7の32ビット/ IIS7 /から[SQLExpress 2008(ローカルのみDEV)

+0

のように見えることになった薄手のUIは、私はサイトコアの数倍に訴えてきただけで完全に文書化されていない...何かですが、私はすべての更新を確認したことはありません。あなたがまだそれをしていないなら、私はこれのためのサポート要求を開くことをお勧めします。 – Bryan

+0

Sheerコンポーネントを実装する最も簡単な方法は、あなたが望むものに近い既存のダイアログを見つけ、リフレクターを使用して必要なものにコピーして変更することです。たとえば、物理ファイルで[パブリッシュを設定]を検索してパブリッシングの制限ダイアログを探します。 XMLファイルを開き、 'Codebeside'クラスを探します。それから、リボンからコマンドを掘り起こし、コールがどのようにコピーされるのか。 – dmgdotnet

+0

Bryan&dmgdotnetに感謝します。 Sitecoreのサポートケースを開いた。彼らが提供する有用な答えを投稿します。私はSitecoreコードを見ていきますが、私は現時点でその時間があるかどうかはわかりません。私は、いくつかの異なるコマンドを作成して、さまざまなシナリオを扱うことができます。 –

答えて

4

念のため、サイトコアサポートは)いくつかの答え

1に戻ってきた "Idは" のIDですポップアップを発生させるアイテム

2) "Where"は "Id"に相対的な場所です。例えば、上、下、右下

3)「controlId」ShowPopupControlを使用するサイトコアから

例ポップアップある項目のIDは、メインメニューとコンテキストメニューされています。

また、SheerUIはまだ文書化されておらず、私は単純にSitecoreコードベースの例を探すように言われました。 Sitecoreのコードを見ることができるのは素晴らしいことですが、少しの方向性は素晴らしいでしょう。たとえドコが単に「ShowPopupControlの使用のために、UI例xはdll zのクラスyで見つけることができる」と言っても。

ポップアップコマンド&のポップアップの寿命は、ポップアップのコードビハインドまたはコマンド自体で終了できます。これは最後のargs.WaitForPostBack()に依存します。これは 'args.WaitForPostBack(true)or 'args.WaitForPostBack(false)'でもかまいません。

最終的に私はShowModalDialog()と一緒に行きました。なぜなら、これはユーザーがクリックできたポップアップではなく、実際に私が望んでいたものだったからです。

だから私のコードは、この

protected void Run(Sitecore.Web.UI.Sheer.ClientPipelineArgs args) 
{ 
    if (args.IsPostBack) 
    { 
     ;// we never come here becuase we have set waitforpostback to false. all processing is handled by the popup control 
    } 
    else 
    { 
     Sitecore.Text.UrlString popUpUrl = new Sitecore.Text.UrlString("/sitecore/content/MYSITE/MyControlPageItem.aspx"); 
     popUpUrl.Append("id", args.Parameters["id"]); 
     popUpUrl.Append("database", args.Parameters["database"]); 
     popUpUrl.Append("language", args.Parameters["language"]); 
     Sitecore.Context.ClientPage.ClientResponse.ShowModalDialog(popUpUrl.ToString(),"400", "600", "", true); 

     args.WaitForPostBack(false); // if this is true this command will wait for the modal dialog created above to close 
             // at which time the Run method will check for postback & args 
    } 
} 
関連する問題