レコード割当ての追加

データ・ドメインのレコードは、標準属性および管理値の1つ以上の新しい割当てで更新できます。

updateRecordsサブ操作でaddAssignments要素のリストを使用すると、標準属性値または管理値(あるいはその両方)を追加することでデータ・ドメインの既存のレコードを更新できます。また、追加される属性が存在しない場合、この要素で標準属性または管理属性を作成することもできます。この場合、PDRにはデフォルト値を使用して追加されます。

Dgraphプロセスでは、標準属性の追加時にタイプ確認が実行されるため、次の点に注意してください。
  • 既存の標準属性の値を追加する場合、新しい値が適切なタイプであることを確認してください。タイプが一致しないとエラーが発生します(たとえば、文字列redを整数の標準属性に割り当てようとした場合)。
  • 新規標準属性を作成および追加する場合、属性タイプを指定する必要があります。
  • 特にタイプ指定されていない標準属性は、デフォルトですべてstringタイプとして扱われます。

属性が複数割当ての標準属性として構成されている場合のみ、その標準属性から複数の値を割り当てることができます。これは、標準属性のPDRのmdex-property_IsSingleAssignプロパティがtrueに設定されていることを意味します。addAssignmentsのリストで、複数の値を受け入れない標準属性に複数の値を割り当てようとすると、エラーが発生します。

管理値は、それが属する管理属性がデータ・ドメインに存在していなくても、レコードに追加できます。この場合、データ・インジェストWebサービスによって、管理属性が自動的に作成されます。

サブ操作のタイプの更新

更新シナリオでは、ingestChanges操作でaddAssignments要素をサポートする2つの更新サブ操作を使用します。どちらを使用するかは、ユーザーのニーズによって異なります。
  • updateRecordsサブ操作では既存レコードの更新のみを行うことができ、新規レコードは追加できません。つまり、指定された主キーが見つからない場合、操作は実行されません。
  • addOrUpdateRecordsサブ操作では、updateRecordsサブ操作と同様に、まず既存のレコードを更新しようとします。指定された主キーが見つからないと、操作のフォールバック動作がaddRecordsサブ操作と同様の処理を行い、指定された主キーの値と追加された割当ての値に基づいて新規レコードが作成されます。

この章では、updateRecordsサブ操作について説明します。addOrUpdateRecordsの説明は、「初期ロード後のレコードの追加」を参照してください。

updateRecordsリクエスト

updateRecordsリクエストでaddAssignments要素を使用して、既存のレコードにキー/値ペアを追加します。リクエストでは、次のリクエスト書式を使用して、更新するレコードの主キーを指定する必要があります。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
   xmlns:ns="http://www.endeca.com/MDEX/ingest/3/0" 
   xmlns:ns1="http://www.endeca.com/MDEX/XQuery/2009/09">
   <soapenv:Header/>
   <soapenv:Body>
      <ns:ingestChanges>
         <ns:updateRecords>
            <ns:recordSpecifier>?</ns:recordSpecifier>
              <ns:addAssignments>
              <ns1:attribute name="?">?</ns1:attribute>
            </ns:addAssignments>
           </ns:updateRecords>
       </ns:ingestChanges>
   </soapenv:Body>
</soapenv:Envelope>
たとえば、次のupdateRecordsリクエストでは、主キーがP123のレコードに1つの標準属性modelNum (integerタイプ)を追加して更新します。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:ns="http://www.endeca.com/MDEX/ingest/3/0" 
  xmlns:ns1="http://www.endeca.com/MDEX/XQuery/2009/09">
  <soapenv:Header/>
   <soapenv:Body>
      <ns:ingestChanges>
        <ns:updateRecords>
          <ns:recordSpecifier>"partID" = 'P123'</ns:recordSpecifier>
              <ns:addAssignments>
              <ns1:attribute name="modelNum" type="mdex:int">2562</ns1:attribute>
            </ns:addAssignments>
         </ns:updateRecords> 
       </ns:ingestChanges>
   </soapenv:Body>
</soapenv:Envelope>

属性タイプであるmodelNum標準属性が指定されていることに注意してください(この標準属性は存在しないため、リクエスト内で作成されます)。

注意: 外部トランザクションを開始するトランザクションWebサービスのリクエストの後に、ingestChangesリクエストを送信する場合、そのリクエストでは外部トランザクションIDを指定する必要があります。外部トランザクションが開始されていない場合、リクエストのID属性は省略する必要があります。