簡體   English   中英

如何在 Sitecore 中動態創建 WizardFormPage?

[英]How to create WizardFormPage dynamically in Sitecore?

我們正在使用 WizardForm xml 控件來實現某種后端 sitecore 向導。 我們希望動態地將控件添加到頁面(甚至創建新的自定義頁面),這取決於在上一頁中所做的選擇。

我已經完成的工作:我們在頁面上調用了頁面控件的父控件(在 ActivePageChanging 事件中)並嘗試在其中添加類型為“WizardDialogBaseXmlControl”的新 object。 但是前端沒有顯示新頁面。 我仍然在瀏覽器的開發者中看到相同數量的頁面。 我在 xml 中設計時添加的工具。我嘗試了“SheerResponse.Redraw()”,但這也沒有幫助。

我的下一次嘗試是在設計時在 xml 文件中創建一些頁面,並用控件填充它們,但是在向導加載后這不起作用。 像“ControlName.Controls.Add(new ControlName())”之類的東西只有在被覆蓋的方法“OnLoad()”中調用時才有效。

此代碼不起作用:

protected override bool ActivePageChanging(string page, ref string newpage)
        {
            if (newpage.Equals(Consts.PrototypeDetailsPageId))
            {
                if (IsFormItemSelected(out var formItem))
                {
                    PrototypeDetailsPanel0.Controls.Add(new Literal("some text"));
                }
                else
                {
                    SheerResponse.Alert("You must select a form item");
                    return false;
                }
            }

            return base.ActivePageChanging(page, ref newpage);
        } 

當頁面和控件依賴於同一向導之前頁面的更改時,我如何創建一個工作向導來在運行時添加頁面和控件?

Sitecore WizardForm依靠newpage參數來處理步驟之間的導航。 因此,您可以提前准備替代版本的向導步驟,並根據在上newpage中輸入的值將其中一個設置為新頁面。 例如,您的代碼如下所示:

protected override bool ActivePageChanging(string page, ref string newpage)
{
    if (newpage.Equals(Consts.PrototypeDetailsPageId))
    {
        if (IsFormItemSelected(out var formItem))
        {
            newpage = "WizardPageWithAdditionalFields";
        }
        else
        {
            SheerResponse.Alert("You must select a form item");
            return false;
        }
    }

    return base.ActivePageChanging(page, ref newpage);
} 

我還發現可以使用 PowerShell 擴展中的交互式對話框輕松創建向導 forms 很有用。 作為替代解決方案,下面是一個示例,說明如何顯示多個對話框以通過多個步驟為用戶導航:

--Prepare step 1
$options = @{
    "A"="a"
    "B"="b"
}

$props = @{
    Parameters = @(
        @{Name="selectedOption"; Title="Choose an option"; Options=$options}
    )
    Title = "Step 1"
}

--Display step 1
$result = Read-Variable @props

if($result -ne "ok") { exit }

--Step 2
if($selectedOption -eq "Expected value") {
    --Perform additional logic, for example modify @props to include additional steps
    $props = @{
        ...
    }  
}

--Display step 2
$result = Read-Variable @props

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM