2010年2月2日火曜日

非表示式とフィールドヘルプで文字がグレーになる

入力項目が多いフォームを使っているアプリケーションでは、入力が面倒なので既存文書の内容をコピーした新規文書を開く機能を作成することがあります。

先日、テスト中のアプリケーションで上記機能に関するちょっとした不具合がありました。

その内容とは、上記の機能で開いた文書では、コピーした値の一部がグレー表示になる、というものです。

では、設計をみてみます。

フォームは次のとおりです(説明の都合上、入力項目を最小限にしています)

・ダイアログリスト(Category)とテキスト(Date, Subject)のフィールドがあります。
・テキストフィールドには非表示式を設定しており、ダイアログリストで選択した値により表示されません。
・テキストフィールドにはフィールドヘルプが設定されています。新規文書のとき、"必須項目:"という文言を薄い色で表示します。

次は開いている文書の値をコピーして新規文書を開くアクションボタンの式です。

tmpCategory := Category;
tmpDate := Date;
tmpSubject := Subject;
@Command([Compose]; "MainTopic");
@UpdateFormulaContext;
@SetField("Category"; tmpCategory);
@SetField("Date"; tmpDate);
@SetField("Subject"; tmpSubject);
@Command([ViewRefreshFields])

上の式をNotes 8.0.1 で実行すると、コピーされた Date フィールドの値がグレー表示されます。
このとき Subject フィールドはグレー表示にはなりません。

設計を少し変えてテストを行い次の現象を確認しました。

・Date フィールドのフィールドヘルプの設定(文言のテキスト)を削除.....グレー表示にならない
・Date フィールドの非表示式を削除.....グレー表示にならない

どうやらフィールドヘルプを設定したフィールドに非表示式があるとグレー表示になるようです。

ここでフォームの設計を基にもどして、非表示式だけを更新する @Command([RefreshHideFormulas]) を試してみることにしました。

<一部省略>
@SetField("Category"; tmpCategory);
@SetField("Date"; tmpDate);
@Command([RefreshHideFormulas]);
.....グレー表示になる

<一部省略>
@SetField("Category"; tmpCategory);
@Command([RefreshHideFormulas]);
@SetField("Date"; tmpDate);
.....グレー表示にならない

つまり、非表示式に関連する項目をセットした後に非表示式を更新するといいようです。
結果、次ように式を変更することで不具合を解消することができました。

tmpCategory := Category;
tmpDate := Date;
tmpSubject := Subject;
@Command([Compose]; "MainTopic");
@UpdateFormulaContext;
@SetField("Category"; tmpCategory);
@Command([RefreshHideFormulas]);
@SetField("Date"; tmpDate);
@SetField("Subject"; tmpSubject)

※@Command([ViewRefreshFields])は非表示式を更新するためだけに利用していましたが@Command([RefreshHideFormulas])の追加により不要になったので削除しました。

0 件のコメント:

コメントを投稿