コアサービスを使用する場合のオプションフィールドのエラーSynchronizeWithSchemaAndUpdate


3

必須の埋め込みテキストフィールド "BBB"を持つ組み込みスキーマ "Aaa"の複数値オプションフィールド "AAA"を持つスキーマでコンポーネントを同期しようとしています。別の埋め込みフィールド「CCC」があります。

AAA - optional multi-value field on Embedded Schema 'Aaa' 
+-> BBB - mandatory single-value text field 
+-> CCC - optional single-value text field 

私のスキーマにコンポーネントを作成するとき、フィールドAAAに値を入力する必要はなく、コンポーネントXMLには何も表示されません。同じコンポーネントをCMEに保存すると、正常に保存されます。

Iクライアントが結合basicHttpを用いICoreServiceオブジェクトであるClient.SynchronizeWithSchemaAndUpdate(tcmUri, SynchronizeOptions)を実行するコアサービスのクライアントを有し、tcmUri、コンポーネントとSynchronizeOptionsのTCMURIがnew SynchronizeOptions { SynchronizeFlags = SynchronizeFlags.All };

である上記のコードは、そのメッセージ読み出しFaultException<CoreServiceFault>を生成:

{"XML validation error. Reason: The element 'AAA' in namespace 'Aaa' has incomplete 
content. List of possible elements expected: 'BBB' in namespace 'Aaa'."} 

このエラーが発生する理由はわかりません。フィールドAAAはオプションの複数値です。埋め込みフィールドBBBのみが必須であり、オプションの埋め込みフィールドCCCに値があり、必須フィールドBBBが省略されている場合にのみ、このエラーがスローされます。

私の質問は次のとおりです:何が起こっているのですか?これはバグですか?誰もこのエラーを見たことがありますか?

2

残念ながら、フラグのいくつかは「破壊的」であり、完全に有効なXMLを無効なXMLにすることができます。以下のフラグは安全でなければなりません:

SynchronizeFlags.ApplyDefaultValuesForMissingMandatoryFields | 
SynchronizeFlags.Basic | 
SynchronizeFlags.ConvertFieldType | 
SynchronizeFlags.FixNamespace | 
SynchronizeFlags.RemoveAdditionalValues | 
SynchronizeFlags.RemoveUnknownFields; 

次のフラグが無効なXMLに有効なXMLを変換することができます:

SynchronizeFlags.ApplyDefaultValuesForMissingNonMandatoryFields 
SynchronizeFlags.ApplyFilterXsltToXhtmlFields 

うまくいけば、我々は、将来のリリースでは、「すべて」の使用にあまり自殺の代替を取得します、残念ながらSDL Web 8リリースには入っていませんでした。

  0

実際に動作します。 'SynchronizeFlags.ApplyDefaultValuesForMissingNonMandatoryFields'が見つからないときに例外はスローされません。説明ありがとう! 05 1月. 162016-01-05 18:31:19


2

上記のシナリオを試してみましたが、コンポーネントの同期が正常に行われていることがわかりました。私は組み込みスキーマとスキーマフィールドでさらにいくつかのシナリオを試してみましたが、すべてうまく動作しているようです。あなたの質問に答えてください - これはAPIのバグではありません。

もう一度知識を得るために、ダブルチェックをしたり、トリプルチェックをしたりすることができます。同期中にSynchronizeFlags.Allフラグを渡しています。また、上記のエラーとは別にログには何かがありますか?

  0

私は3つの異なるシステムで自分のコードを試しましたが、私はそれらすべてにエラーがあります。回避策として、 'SynchronizeFlags.All'を使用せず、' SynchronizeFlags.ApplyDefaultValuesForMissingNonMandatoryFields'を除き、他のすべてのフラグをビット単位のORで使用するようにしてください。それが私にとって唯一の解決策です。 SynchronizeFlags.ApplyDefaultValuesForMissingNonMandatoryFieldsを追加すると、例外がスローされます。 05 1月. 162016-01-05 06:24:42

  0

かなり奇妙です 05 1月. 162016-01-05 06:47:41

  0

私はそれを自分自身で二重チェックしませんでしたが、 'SF.All^SF.ApplyDefaultValuesForMissingNonMandatoryFields'は他のすべてのフラグをビット単位でOR演算するのと同じ結果を返さなければなりません。 05 1月. 162016-01-05 19:14:18