Transaction オブジェクトのどのベーステーブルにも格納されない項目属性を編集または更新できます。
Update(att1, ...,
attn);
入力値の説明: att1, ...,
attn:
拡張テーブルに属する項目属性です。
オブジェクト: Transaction オブジェクト
このルールを使用することで、
Transaction オブジェクトのどのベーステーブルにも格納されない項目属性を編集または更新できます。
トランザクションレベルの場合、編集できる項目属性は、そのレベルの
ベーステーブルに格納されたもののみです。たとえば、Invoice トランザクション内では、フォーム内に CustomerName を格納できますが、編集することはできません。Invoice フォーム内で編集可能な Customer 項目属性は、CustomerId のみです。これは、この項目属性が Invoice テーブルに格納されるためです。
Invoice フォーム内で CustomerName を編集する手段が欲しいというニーズに応じて、Update() ルールが導入されました。
これは、条件のないルールです。そのため、特定の項目属性の編集を条件付きで許可するには、
NoAccept ルールと組み合わせる必要があります。
次の例に、Update ルールの標準的な使用方法を示します。CustomerAddressLastShipment 項目属性を含む Customer トランザクションおよび Invoice トランザクションがあるとします。
Invoice
{
InvoiceNumber*
InvoiceDate
CustomerId
CustomerName
CustomerRUT
CustomerAddressLastShipment
InvoiceLastNumber
}
ProductId*
ProductDescription
ProductPrice
InvoiceLineQtty
InvoiceLineTotal
}
}
Customer
{
CustomerId*
CustomerName
CustomerRUT
CustomerAddress
CustomerAddressLastShipment
CustomerMail
CustomerBalance
CustomerPhone
}
CustomerAddressLastShipment 項目属性は Customer テーブルから推論され、読み取り専用モードで画面に表示されます。ただし、発送先住所が変更された場合は、このルールで解決できます。
Update(CustomerAddressLastShipment);
オペレーターが住所を変更した場合、この新しい情報は Customer テーブルに格納されます。
検討事項:
-
トランザクションには 1 つまたは複数の Update ルールを含めることができます。これらの記述方法についての推奨は特にありません。
- このルールによって発生する (既に承認された項目属性の参照に対してなどの) エラーや警告はありません。
- 更新モードでのルールの動作に関する考慮事項は、次のとおりです:
推論された項目属性を決定する外部キーが変更される可能性があり (つまり、外部キーがベーステーブルの主キーに属していない)、その外部キーが別のトランザクション、または作業単位内で変更された場合、元の外部キーの値の、推論された項目属性の値は復元されません。この概念について、次の例で説明します:
次の 2 つの関連付けられたトランザクションがあるとします: Customer、Invoice。CustomerCode は Invoice 内の外部キー (FK) であり、次のルールが適用されています:
Update(CustomerName);
CustomerCode = 1 の 1 番目の Invoice が含まれており、このとき CustomerName = "Customer_x" です。CustomerName の値が 1 番目の Invoice (正確には Customer のテーブル) 内で「Customer_new」に変更され、この Invoice が確定されます。
その後、新しい
LUW 内で、1 番目の Invoice の CustomerCode が、CustomerCode = 2 などの別の値に変更されます。この変更によって 1 番目の Customer の CustomerName が元の値に戻されることはありません。