Appearance
Change
Envelope の change は、操作対象のリソース自身の属性が「何から何に」変わったのかを記録します。 たとえばノートブックの名前を変更したイベントには、変更前と変更後の名前が入ります。
change に入るのは、変わった値のうち、Envelope の他のフィールドからは読み取れないものです。 名前のように、そのイベント発生時点の値が resource に入る属性は、 変更前の値が他に残らない更新イベントでは change に入り、作成・削除イベントでは入りません。 他のリソースとの関係の変化(メンバーの追加、権限の付与など)は grant に入ります。
作成・削除のイベントにも change は付きます。 同じリソースの同じ属性は、イベントをまたいで同じ名前・同じモードで記録され、 作成イベントには初期値だけ、削除イベントには削除時点の値だけが入ります。 「作成された」「削除された」という事実そのものはイベントの種類が表すため、change には入りません。 値をそのまま残せない属性(ChangedField の集合モード・フラグモード)は、 作成・削除イベントには入らず、更新イベントにのみ入ります。
change の形はすべてのイベントで共通です。 どの属性が記録されるかはイベントごとに決まっており、変わり得るすべての属性が入るわけではありません。 一覧は各イベントページの change を参照してください。
Objects
Change
変更された属性の一覧。1回の操作で複数の属性が変わった場合は、fields に複数のエントリが並びます。
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
fields | ChangedField[] | 必須 | 変更された属性ごとのエントリ |
ChangedField
変更された属性1つ分です。属性の性質に応じて、次の3つのモードのいずれか1つで記録されます (1つのエントリに複数のモードが混ざることはありません)。
| モード | 使うフィールド | 使われる場面 |
|---|---|---|
| 値 | old / new | 名前や説明のように、変更前後の値をそのまま残せる属性 |
| 集合 | added / removed | タグや許可 URL のように、要素の増減で表せる属性 |
| フラグ | changed | ノートブックの本文のように、値が大きすぎて残せない属性 |
どの属性がどのモードになるかは、各イベントページの change の表に記載しています。
値モードでは、どちらのフィールドが入っているかで意味が変わります。
| 入っているフィールド | 意味 |
|---|---|
new のみ | 作成時の初期値 |
old のみ | 削除時点の値 |
| 両方 | 変更 |
フィールドがない場合と、値が null の場合は区別します。 フィールドがない場合は値が設定されていなかったことを表し、null は null という値そのものを表します。 作成時に old が入らないのは、変更前の値が存在しないためです。
これは old: null(null という値だった)とは異なります。 値が配列の属性でも同じで、値がないことは null で表します (空配列は使いません。null との二重表現になるため)。
集合モードでは、増減がなかった側にも空の配列が入ります。 要素集合そのものの増減を表すほか、操作の影響を受けた要素の集合を表す場合もあります。 それぞれの属性が何を表すかは、各イベントページの change に記載しています。
result.status が deny のイベントでは、grant と同様に、 実際には反映されていない「試みられた内容」が入ります。 たとえば作成が拒否されて resource.uid が null になる場合でも、 どのような値で作ろうとしたのかは残ります。
| 名前 | 型 | 必須 | 説明 |
|---|---|---|---|
name | string | 必須 | 変更された属性の名前 |
old | any | 任意 | 変更前の値(値モードのとき) |
new | any | 任意 | 変更後の値(値モードのとき) |
changed | bool | 任意 | 値を残さず、変更があったことだけを示す true(フラグモードのとき) |
added | any[] | 任意 | 追加された要素(集合モードのとき) |
removed | any[] | 任意 | 削除された要素(集合モードのとき) |