2011/11/03

access2010 VSTOアプリケーションアドイン -10-

ちゃんと勉強してないから基本的なことで挫折しそうになる。でも、学習しない放浪記。
こんな感じなものをどうしたらいいかと試行錯誤中
dynamicMenuを使ってフォームを列挙したい。getContentで要求されるXMLをLINQでごによごにょしてずばっとできるかなと。
<dynamicMenu id="FormEnum" 
             label="フォーム" 
             getContent="getContent" 
             invalidateContentOnDrop="true" />

Function getContent(ctr As Office.IRibbonControl) As String
        Dim root As XElement =
            New XElement("menu", New XAttribute("itemSize", "normal"),
                         New XElement("menuSeparator",
                                      New XAttribute("id", "sep1"),
                                      New XAttribute("title", "クライアントフォーム")),
                         (From frm
                          In Globals.ThisAddIn.Application.CurrentProject.AllForms.Cast(Of Access.AccessObject)()
                          Order By frm.Name Where frm.IsWeb = False
                          Select New XElement("button",
                                              New XAttribute("id", "f" & Guid.NewGuid.ToString("N")),
                                              New XAttribute("label", frm.Name),
                                              New XAttribute("imageMso", "CreateForm"),
                                              New XAttribute("onAction", "onAction")
                                             )
                         ),
                         New XElement("menuSeparator",
                                       New XAttribute("id", "sep2"),
                                       New XAttribute("title", "Webフォーム")),
                         (From frm
                          In Globals.ThisAddIn.Application.CurrentProject.AllForms.Cast(Of Access.AccessObject)()
                          Order By frm.Name Where frm.IsWeb = True
                          Select New XElement("button",
                                              New XAttribute("id", "f" & Guid.NewGuid.ToString("N")),
                                              New XAttribute("label", frm.Name),
                                              New XAttribute("imageMso", "CreateFormWeb"),
                                              New XAttribute("onAction", "onAction")
                                             )
                         )
                        )
        Return Replace(root.ToString,
                       "menu",
                       "menu xmlns=""http://schemas.microsoft.com/office/2009/07/customui""",
                       1, 1)
End Function
最後の最後、xmlnsの扱いが解らず置換してしまった。
id属性にフォーム名を使うのはやめた。フォーム名にはスペースが含まれることがありえるから。あー、tagつけるの忘れた。

0 件のコメント: