2011/05/25

access2010 Webデータベース その54 レコードの移動 -2-

** Office365beta(プランP1) 環境 **
確認ダイアログフォームを作ったので、レコードナビゲーション用のコントロールに実装してみる。

カレントレコードが新規レコードである場合でかつレコードの保存時にエラーが発生した場合のDirtyプロパティのことも考慮しなければならない。
レコードナビゲーション用のコマンドボタン押下時のマクロは基本的にはすべて同じ。レコードの移動マクロアクションの引数だけ違う。
<?xml version="1.0" encoding="UTF-16" standalone="no"?>
<UserInterfaceMacros xmlns="http://schemas.microsoft.com/office/accessservices/2009/11/application">
  <UserInterfaceMacro For="cmdNew" Event="OnClick">
    <Statements>
      <Action Collapsed="true" Name="OnError">
        <Argument Name="Goto">Macro Name</Argument>
        <Argument Name="MacroName">ErrHnd</Argument>
      </Action>
      <ConditionalBlock>
        <If>
          <Condition>[Form].[Dirty]</Condition>
          <Statements>
            <Action Collapsed="true" Name="SetTempVar">
              <Argument Name="Name">DialogYesNoCancel1</Argument>
              <Argument Name="Expression">"編集内容を登録しますか?"</Argument>
            </Action>
            <Action Collapsed="true" Name="SetTempVar">
              <Argument Name="Name">DialogYesNoCancel2</Argument>
              <Argument Name="Expression">"カレントレコードは編集中です。"</Argument>
            </Action>
            <Action Collapsed="true" Name="OpenForm">
              <Argument Name="FormName">DialogYesNoCancel</Argument>
              <Argument Name="WindowMode">Dialog</Argument>
            </Action>
            <ConditionalBlock>
              <If>
                <Condition>[TempVars]![DialogYesNoCancel]="Yes"</Condition>
                <Statements>
                  <Action Collapsed="true" Name="SaveRecord" />
                </Statements>
              </If>
              <ElseIf>
                <Condition>[TempVars]![DialogYesNoCancel]="No"</Condition>
                <Statements>
                  <Action Collapsed="true" Name="UndoRecord" />
                </Statements>
              </ElseIf>
              <Else>
                <Statements>
                  <Action Name="StopMacro" />
                </Statements>
              </Else>
            </ConditionalBlock>
          </Statements>
        </If>
      </ConditionalBlock>
      <Action Collapsed="true" Name="GoToRecord">
        <Argument Name="Record">New</Argument>
      </Action>
    </Statements>
    <Sub Name="ErrHnd">
      <Statements>
        <Action Collapsed="true" Name="MessageBox">
          <Argument Name="Message">=[MacroError].[ActionName] &amp; " / " &amp; [MacroError].[Description]</Argument>
        </Action>
        <ConditionalBlock>
          <If>
            <Condition>Not IsClient()</Condition>
            <Statements>
              <ConditionalBlock>
                <If>
                  <Condition>IsNull([ID])</Condition>
                  <Statements>
                    <ConditionalBlock>
                      <If>
                        <Condition>[MacroError].[ActionName]="SaveRecord" And Not [Form].[Dirty]</Condition>
                        <Statements>
                          <Action Collapsed="true" Name="SetLocalVar">
                            <Argument Name="Name">lclVar</Argument>
                            <Argument Name="Expression">[Field2]</Argument>
                          </Action>
                          <Action Collapsed="true" Name="SetProperty">
                            <Argument Name="ControlName">Field2</Argument>
                            <Argument Name="Property">Value</Argument>
                          </Action>
                          <Action Collapsed="true" Name="SetProperty">
                            <Argument Name="ControlName">Field2</Argument>
                            <Argument Name="Property">Value</Argument>
                            <Argument Name="Value">=[LocalVars]![lclVar]</Argument>
                          </Action>
                        </Statements>
                      </If>
                    </ConditionalBlock>
                  </Statements>
                </If>
              </ConditionalBlock>
            </Statements>
          </If>
        </ConditionalBlock>
きちんと検証してない。

0 件のコメント: