0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

重複登録防止(ユニークとバリデーション)

Last updated at Posted at 2023-07-03

EntityにAtrributeを追加してscaffoldするだけだと、このように重複登録ができてしまいます。
image.png

EntityにUniqueを付けます。
Entityを右クリックし、Edit Entityを選択。

image.png

New indexをクリック。
image.png

UniqueをYesにし、Attributesに重複させたくない項目(今回はName)を入れていきます。
image.png

Entityを変更したので、Publishしますが、
Entiry上で既に重複があるとエラーになってしまいます。
image.png

Publish済みのアプリケーションかEntityを右クリックのView or Edit Dataから重複がないようにデータを変更して、Publishを成功させましょう。
image.png

重複した内容で登録しようとするとエラーが出るようになりましたが、
これだとエンドユーザーにとって不親切なのでValidationを行っていきます。
image.png

CustomerDetailのClient Action、Save Detailを開きます。
image.png

CustomerDetail(Screen)を右クリックし、Fetch Data from Databaseを選択、名前をGetCustomerByNameにします。
image.png

What data do you want to get? に get customer by Name と入力していくと表示されるそれらしきEntityを選択し、Get Dataをクリックします。
image.png

No Filtersになっているタブを選択し、Add filerボタンをクリックします。
image.png

Screen上に表示されているName(GetCustomerById.List.Current.Customer.Name)と同じものという条件を入れます。
image.png

SaveDetailのStartの下にGetCustomerByNameを配置、その下にIfを配置し、ConditionをGetCustomersByName.List.Emptyにします。
image.png

Validationエラー時のAssignを配置しますが、配置したIfの矢印の向きに注意してください。
EmptyがTrueの時は重複していないので下、Falseの時は重複しているのでAssignに向かいます。
そして、そのAssignからはTrueと同じ方向に向かうようにしてください。
そうすると複数項目あった場合、複数のエラー表示を行うことができます。
image.png

AssignmentsはInput_Name.ValidとInput_Name.ValidationMessageですが、
Widgetsの配下にあり、配下のValidを一つでもFalseにするとForm1.ValidもFalseになるようです。
image.png

Form1.ValidがFalseの時は、CreateOrUpdateに向かわないようになります。
image.png

テストしてみましょう。
重複した名前でSaveボタンを押すと、エラーが表示されるようになりました。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?