ここは旧式の4DドキュメントWebサイトです。最新のアップデートされたドキュメントを読むには新サイトをご利用下さい→ developer.4d.com

ホーム

 
4D v19.8
entity.diff( )

entity.diff( ) 


 

entity.diff ( entityToCompare {; attributesToCompare} ) -> 戻り値 
引数   説明
entityToCompare  Entity in オリジナルのエンティティと比較するエンティティ
attributesToCompare  コレクション in 比較する属性の名前
戻り値  コレクション in エンティティ間の差異

説明   

entity.diff( ) メソッドは二つのエンティティの中身を比較し、その差異を返します。

entityToCompare 引数には、オリジナルのエンティティと比較をするエンティティを渡します。

attributesToInspect 引数では、比較する特定の属性を指定することができます。これを渡した場合、比較は指定された属性に対してのみ行われます。省略時には、エンティティ間の全ての差異が返されます。

エンティティの差異は、以下のプロパティを持つオブジェクトのコレクションとして返されます:

プロパティ名詳細
attributeName文字列属性名
value属性の型によるエンティティ内での属性の値
otherValue属性の型によるentityToCompare内の属性の値

コレクションに含まれるのは異なる値を持っていた属性のみです。差異が見つからない場合、entity.diff( ) は空のコレクションを返します。

このメソッドは型がstorage あるいは relatedEntity であるプロパティに適用されます(dataClassAttribute.kind参照)。リレートされたエンティティが更新された場合(外部キーを意味します)、リレートされたエンティティの名前とそのプライマリーキー名がattributeName プロパティに返されます(value および otherValue はリレートされたエンティティ名については空になります)。

比較するどちらかのエンィティがNull である場合、エラーが生成されます。

 C_COLLECTION($diff1;$diff2)
 employee:=ds.Employee.query("ID=1001").first()
 $clone:=employee.clone()
 employee.firstName:="MARIE"
 employee.lastName:="SOPHIE"
 employee.salary:=500
 $diff1:=$clone.diff(employee// 全ての差異が返されます
 $diff2:=$clone.diff(employee;New collection("firstName";"lastName"))
  // firstName と lastName についての差異のみが返されます

$diff1:

[
    {
        "attributeName": "firstName",
        "value": "Natasha",
        "otherValue": "MARIE"
    },
    {
        "attributeName": "lastName",
        "value": "Locke",
        "otherValue": "SOPHIE"
    },
    {
        "attributeName": "salary",
        "value": 66600,
        "otherValue": 500
    }
]

$diff2:

[
    {
        "attributeName": "firstName",
        "value": "Natasha",
        "otherValue": "MARIE"
    },
    {
        "attributeName": "lastName",
        "value": "Locke",
        "otherValue": "SOPHIE"
    }
]

 vCompareResult1:=New collection
 vCompareResult2:=New collection
 vCompareResult3:=New collection
 $attributesToInspect:=New collection
 
 $e1:=ds.Employee.get(636)
 $e2:=ds.Employee.get(636)
 
 $e1.firstName:=$e1.firstName+" update"
 $e1.lastName:=$e1.lastName+" update"
 
 $c:=ds.Company.get(117)
 $e1.employer:=$c
 $e2.salary:=100
 
 $attributesToInspect.push("firstName")
 $attributesToInspect.push("lastName")
 
 vCompareResult1:=$e1.diff($e2)
 vCompareResult2:=$e1.diff($e2;$attributesToInspect)
 vCompareResult3:=$e1.diff($e2;$e1.touchedAttributes())

vCompareResult1 (全ての差異が返されている):

[
    {
        "attributeName": "firstName",
        "value": "Karla update",
        "otherValue": "Karla"
    },
    {
        "attributeName": "lastName",
        "value": "Marrero update",
        "otherValue": "Marrero"
    },
    {
        "attributeName": "salary",
        "value": 33500,
        "otherValue": 100
    },
    {
        "attributeName": "employerID",
        "value": 117,
        "otherValue": 118
    },
  {
        "attributeName": "employer",
        "value": "[object Entity]",// Company の Entity 117
        "otherValue": "[object Entity]"// Company の Entity 118
    }
]

vCompareResult2 ($attributesToInspect についての差異のみ返される)

[
    {
        "attributeName": "firstName",
        "value": "Karla update",
        "otherValue": "Karla"
    },
    {
        "attributeName": "lastName",
        "value": "Marrero update",
        "otherValue": "Marrero"
    }
]

vCompareResult3 ($e1 がtouch した属性のみが返される)

[
    {
        "attributeName": "firstName",
        "value": "Karla update",
        "otherValue": "Karla"
    },
    {
        "attributeName": "lastName",
        "value": "Marrero update",
        "otherValue": "Marrero"
    },
    {
        "attributeName": "employerID",
        "value": 117,
        "otherValue": 118
    },
     {
        "attributeName": "employer",
        "value": "[object Entity]",// Company の Entity 117
        "otherValue": "[object Entity]"// Company の Entity 118

    }
]



参照 

entity.touched( )

 
プロパティ 

プロダクト: 4D
テーマ: ORDA - エンティティ

 
ページの目次 
 
履歴 

初出: 4D v17

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v19)
ランゲージリファレンス ( 4D v19.1)
ランゲージリファレンス ( 4D v19.4)
ランゲージリファレンス ( 4D v19.5)
ランゲージリファレンス ( 4D v19.6)
ランゲージリファレンス ( 4D v19.7)
ランゲージリファレンス ( 4D v19.8)