2015-11-05 51 views
3

我創建了一個自定義Save Action,它將WFFM字段值寫入第三方服務。自定義Save Action使用開箱即用的FieldMappings編輯器,以便內容編輯器可以指定哪些字段映射到哪些屬性發送到服務。WFFM保存動作從編輯器獲取字段映射

我有它的工作,所以所有的屬性出現在編輯器中供用戶選擇相關的字段。

enter image description here

的問題是,我無法找到如何在Save ActionExecute方法的點得到這些映射。我已經對現有的字段Save Action進行了反編譯,因爲它也使用了MappingField編輯器,但它最終會忽略映射。

public class SaveToSalesForceMarketingCloud : ISaveAction 
{ 
    public string Mapping { get; set; } 

    public void Execute(ID formid, AdaptedResultList fields, params object[] data) 
    { 
     FormItem formItem = Sitecore.Context.Database.GetItem(formid); 
     if (formItem == null) 
      return; 

     string mappingXml = Mapping; 

     // Using the Property Name does not return the Mapped Field 
     var emailAddressField = fields.GetEntryByName("Email address"); 
     // Using the actual name of the Field on the Form returns the Field 
     var emailField = fields.GetEntryByName("Email"); 
    } 
} 

任何人都知道如何獲得映射?

+0

當你說你不能得到映射,你是什麼意思,'映射'在空執行方法是空的/空? – jammykam

+0

嗨鑑,通過編輯器對話框創建的映射。在其他SaveActions上看到它後,我嘗試添加Mapping屬性,並且可以解析XML。 –

回答

4

的映射存儲在你的表格,然後將其填充到您定義的Mapping財產的保存操作字段中的鍵/值對。

檢查您的表單的Save Field,您會注意到該字符串的格式類似於<mapping>key=value1|key=value2</mapping>。這是您在保存操作中可用的字符串值。你需要自己處理它,WFFM不會爲你安排任何東西。爲了訪問映射,您使用Sitecore實用方法:

NameValueCollection nameValueCollection = StringUtil.ParseNameValueCollection(this.Mapping, '|', '='); 

這使您可以訪問鍵/值對。然後,您需要枚舉這些字段或提交的表單數據(如適用)以填充對象以進行進一步操作。

假設密鑰在WFFM字段ID和價值是映射到外地,類似於此

foreach (AdaptedControlResult adaptedControlResult in fields) 
{ 
    string key = adaptedControlResult.FieldID; //this is the {guid} of the WFFM field 
    if (nameValueCollection[key] != null) 
    { 
     string value = nameValueCollection[key]; //this is the field you have mapped to 
     string submittedValue = adaptedControlResult.Value; //this is the user submitted form value 
    } 
} 

東西拿在Sitecore.Forms.Custom看看Sitecore.Form.Submit.CreateItem對於類似的操作和字段映射編輯器的示例在哪裏使用。

+0

感謝Kam,看起來像使用SaveActions屬性來獲取映射是前進的方向 - 恥辱它不是一個更有用的格式 –

+0

創建一個幫助方法來提取映射並將值提交到另一個'List'屬性中,這使得更多的操作可重複使用並更容易訪問。由於動態性,無法獲得強類型訪問。 – jammykam

2

我認爲它通過將字段與Save Action類中的公共屬性進行匹配而得到連接。

因此,對於你的例子:

public string EmailAddress { get; set; } 
public string ConfirmEmailAddress { get; set; } 
public string Title { get; set ;} 
etc.. 
+0

這適用於此映射的字段Id。唯一的缺點是它的屬性固定列表 –

相關問題