プロパティーの操作
以下のトピックでは、プロパティー関連のオブジェクトを使用するタスクについて説明し、Java™ および C# のコード例を示します。
PropertyDescription オブジェクトの取得
オブジェクト・ストア内の特定の PropertyDescription オブジェクトを検索するコード例を以下に示します。
Java の例
System.out.println ("Type the symbolic name of the class description in which the property description is located:");
InputStreamReader converter = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(converter);
String strClassDescSymbolicName = in.readLine();
// プロパティー・フィルターを作成して、CD の PropertyDescriptions プロパティーが評価済みとして返されるようにする
PropertyFilter pf = new PropertyFilter();
pf.addIncludeType(0, null, Boolean.TRUE, FilteredPropertyType.ANY, null);
// 選択したクラス記述をサーバーから取得する
ClassDescription objClassDesc = Factory.ClassDescription.fetchInstance(objObjectStore, strClassDescSymbolicName, pf);
String strPropDescSymbolicName;
System.out.println("Type the symbolic name of the property description you want to retrieve:");
String strSearchName = in.readLine();
// Get PropertyDescriptions property from the property cache
PropertyDescriptionList objPropDescs = objClassDesc.get_PropertyDescriptions();
Iterator iter = objPropDescs.iterator();
PropertyDescription objPropDesc = null;
// プロパティー説明が見つかるまでループする
while (iter.hasNext())
{
objPropDesc = (PropertyDescription) iter.next();
// SymbolicName プロパティーをプロパティー・キャッシュから取得する
strPropDescSymbolicName = objPropDesc.get_SymbolicName();
if (strPropDescSymbolicName.equalsIgnoreCase(strSearchName))
{
// PropertyDescription オブジェクトが見つかる
System.out.println("Property description selected: " + strPropDescSymbolicName);
System.out.println(objPropDesc);
break;
}
}
C# の例
Console.WriteLine("Type the symbolic name of the class description in which the property description is located:");
String strClassDescSymbolicName = Console.ReadLine();
// プロパティー・フィルターを作成して、CD の PropertyDescriptions プロパティーが評価済みとして返されるようにする
PropertyFilter pf = new PropertyFilter();
pf.AddIncludeType(0, null, true, FilteredPropertyType.ANY, null);
// 選択したクラス記述をサーバーから取得する
IClassDescription objClassDesc = Factory.ClassDescription.FetchInstance(objObjectStore, strClassDescSymbolicName, pf);
String strPropDescSymbolicName;
Console.WriteLine("Type the symbolic name of the property description you want to retrieve:");
String strSearchName = Console.ReadLine();
// Get PropertyDescription property from the property cache
IPropertyDescriptionList objPropDescs = objClassDesc.PropertyDescriptions;
// プロパティー説明が見つかるまでループする
foreach (IPropertyDescription objPropDesc in objPropDescs)
{
strPropDescSymbolicName = objPropDesc.SymbolicName;
if (strPropDescSymbolicName.Equals(strSearchName, StringComparison.OrdinalIgnoreCase))
{
// PropertyDescription オブジェクトが見つかる
Console.WriteLine("Property description selected: " + strPropDescSymbolicName);
Console.WriteLine(objPropDesc);
Console.WriteLine("Press any key to end");
Console.ReadLine();
break;
}
}
PropertyDefinition オブジェクトの取得
オブジェクト・ストア内の特定の PropertyDefinition オブジェクトを検索するコード例を以下に示します。
Java の例
System.out.println ("Type the symbolic name of the class definition in which the property definition is located:");
InputStreamReader converter = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(converter);
String strClassDefSymbolicName = in.readLine();
// プロパティー・フィルターを作成して、CD の PropertyDefinitions プロパティーが評価済みとして返されるようにする
PropertyFilter pf = new PropertyFilter();
pf.addIncludeType(0, null, Boolean.TRUE, FilteredPropertyType.ANY, null);
// 選択したクラス定義をサーバーから取得する
ClassDefinition objClassDef = Factory.ClassDefinition.fetchInstance(objObjectStore, strClassDefSymbolicName, pf);
String objPropDefSymbolicName;
System.out.println("Type the name of the property definition you want to retrieve:");
String strSearchName = in.readLine();
// PropertyDefinitions プロパティーをプロパティー・キャッシュから取得する
PropertyDefinitionList objPropDefs = objClassDef.get_PropertyDefinitions();
Iterator iter = objPropDefs.iterator();
PropertyDefinition objPropDef = null;
// プロパティー定義が見つかるまでループする
while (iter.hasNext())
{
objPropDef = (PropertyDefinition) iter.next();
// SymbolicName プロパティーをプロパティー・キャッシュから取得する
objPropDefSymbolicName = objPropDef.get_SymbolicName();
if (objPropDefSymbolicName.equalsIgnoreCase(strSearchName))
{
// PropertyDefinition オブジェクトが見つかる
System.out.println("Property definition selected: " + objPropDefSymbolicName);
System.out.println(objPropDef);
break;
}
}
C# の例
Console.WriteLine ("Type the symbolic name of the class definition in which the property definition is located:");
String strClassDefSymbolicName = Console.ReadLine ();
// プロパティー・フィルターを作成して、CD の PropertyDefinitions プロパティーが評価済みとして返されるようにする
PropertyFilter pf = new PropertyFilter();
pf.AddIncludeType(0, null, true, FilteredPropertyType.ANY, null);
// 選択したクラス定義をサーバーから取得する
IClassDefinition objClassDef = Factory.ClassDefinition.FetchInstance(objObjectStore, strClassDefSymbolicName, pf);
String objPropDefSymbolicName;
Console.WriteLine("Type the name of the property definition you want to retrieve:");
String strSearchName = Console.ReadLine ();
// PropertyDefinitions プロパティーをプロパティー・キャッシュから取得する
IPropertyDefinitionList objPropDefs = objClassDef.PropertyDefinitions;
// プロパティー定義が見つかるまでループする
foreach (IPropertyDefinition objPropDef in objPropDefs)
{
objPropDefSymbolicName = objPropDef.SymbolicName;
if (objPropDefSymbolicName.Equals(strSearchName, StringComparison.OrdinalIgnoreCase))
{
// PropertyDefinition オブジェクトが見つかる
Console.WriteLine("Property definition selected: " + objPropDefSymbolicName);
Console.WriteLine(objPropDef);
Console.WriteLine("Press any key to end");
Console.ReadLine();
break;
}
}
カスタム・プロパティーの作成
以下のコード例は、新規プロパティー・テンプレートからプロパティー定義を作成し、それをクラス定義に追加することにより、カスタム・プロパティーを作成する方法を示しています。
Java の例
System.out.println ("Type the symbolic name of the class definition in which to add the new custom property:");
InputStreamReader converter = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(converter);
String strClassDefSymbolicName = in.readLine();
// プロパティー・フィルターを作成して、CD の PropertyDefinitions プロパティーが評価済みとして返されるようにする
PropertyFilter pf = new PropertyFilter();
pf.addIncludeType(0, null, Boolean.TRUE, FilteredPropertyType.ANY, null);
// 選択したクラス定義をサーバーから取得する
ClassDefinition objClassDef = Factory.ClassDefinition.fetchInstance(objObjectStore, strClassDefSymbolicName, pf);
System.out.println("Class definition selected: " + objClassDef.get_SymbolicName());
// 単一値ストリング・プロパティーのプロパティー・テンプレートを作成する
System.out.println ("Type the name of the new property template:");
String strPropTemplateName = in.readLine();
PropertyTemplateString objPropTemplate = Factory.PropertyTemplateString.createInstance(objObjectStore);
// プロパティー・テンプレートから作成されるプロパティーのカーディナリティーを設定する
objPropTemplate.set_Cardinality (Cardinality.SINGLE);
// ロケールを設定する
LocalizedString locStr = Factory.LocalizedString.createInstance();
locStr.set_LocalizedText(strPropTemplateName);
locStr.set_LocaleName (objObjectStore.get_LocaleName());
// LocalizedString コレクションを作成する
objPropTemplate.set_DisplayNames (Factory.LocalizedString.createList());
objPropTemplate.get_DisplayNames().add(locStr);
// 新規プロパティー・テンプレートをサーバーに保存する
objPropTemplate.save(RefreshMode.REFRESH);
// プロパティー・テンプレートからプロパティー定義を作成する
PropertyDefinitionString objPropDef = (PropertyDefinitionString)objPropTemplate.createClassProperty();
// PropertyDefinitions プロパティーをプロパティー・キャッシュから取得する
PropertyDefinitionList objPropDefs = objClassDef.get_PropertyDefinitions();
// 新規プロパティー定義をクラス定義に追加する
objPropDefs.add(objPropDef);
objClassDef.save(RefreshMode.REFRESH);
System.out.println("New property definition: ");
System.out.println(objPropDef);
C# の例
Console.WriteLine ("Type the symbolic name of the class definition in which to add the new custom property:");
String strClassDefSymbolicName = Console.ReadLine();
// プロパティー・フィルターを作成して、CD の PropertyDefinitions プロパティーが評価済みとして返されるようにする
PropertyFilter pf = new PropertyFilter();
pf.AddIncludeType(0, null, true, FilteredPropertyType.ANY, null);
// 選択したクラス定義をサーバーから取得する
IClassDefinition objClassDef = Factory.ClassDefinition.FetchInstance(objObjectStore, strClassDefSymbolicName, pf);
Console.WriteLine("Class definition selected: " + objClassDef.SymbolicName);
// 単一値ストリング・プロパティーのプロパティー・テンプレートを作成する
Console.WriteLine("Type the name of the new property template:");
String strPropTemplateName = Console.ReadLine();
IPropertyTemplateString objPropTemplate = Factory.PropertyTemplateString.CreateInstance(objObjectStore);
// プロパティー・テンプレートから作成されるプロパティーのカーディナリティーを設定する
objPropTemplate.Cardinality = Cardinality.SINGLE;
// ロケールを設定する
ILocalizedString LocStr = Factory.LocalizedString.CreateInstance();
LocStr.LocalizedText = strPropTemplateName;
LocStr.LocaleName = objObjectStore.LocaleName;
// LocalizedString コレクションを作成する
objPropTemplate.DisplayNames = Factory.LocalizedString.CreateList();
objPropTemplate.DisplayNames.Add(LocStr);
// 新規プロパティー・テンプレートをサーバーに保存する
objPropTemplate.Save(RefreshMode.REFRESH);
// プロパティー・テンプレートからプロパティー定義を作成する
IPropertyDefinitionString objPropDef = (IPropertyDefinitionString)objPropTemplate.CreateClassProperty();
// PropertyDefinitions プロパティーをプロパティー・キャッシュから取得する
IPropertyDefinitionList objPropDefs = objClassDef.PropertyDefinitions;
// 新規プロパティー定義をクラス定義に追加する
objPropDefs.Add(objPropDef);
objClassDef.Save(RefreshMode.REFRESH);
Console.WriteLine("New property definition: ");
Console.WriteLine(objPropDef);
Console.WriteLine("Press any key to end");
Console.ReadLine();
プロパティー・フィルターの作成
プロパティー・フィルターを作成するには、以下の手順を実行します。
- PropertyFilter オブジェクトを作成します。
- PropertyFilter オブジェクトのグローバル属性を設定するには、以下のように該当するメソッドを呼び出します。
- maxRecursion グローバル属性を設定するには、setMaxRecursion を呼び出します。
- maxSize グローバル属性を設定するには、setMaxSize を呼び出します。
- levelDependents グローバル属性を設定するには、setLevelDependents を呼び出します。
- pageSize グローバル属性を設定するには、setPageSize を呼び出します。
- FilterElement オブジェクトを自分で作成するか (手順 5 に進む)、サーバーに作成させます (手順 7 に進む)。
- コンストラクターのいずれかを使用して、FilterElement オブジェクトを作成します。コンストラクターの該当するパラメーターを使用して、4 つの属性 (maxRecursion、maxSize、levelDependents、pageSize) を設定します。設定した属性は、PropertyFilter オブジェクトの対応するグローバル属性の値をオーバーライドします。
- 作成した FilterElement オブジェクトを渡して、addIncludeProperty メソッドまたは addIncludeType メソッドを呼び出します。 作成するフィルター・エレメントごとに、手順 4 と 5 を繰り返します。
- アプリケーションのためにサーバーに FilterElement オブジェクトを作成させるには、該当する addIncludeProperty メソッドまたは addIncludeType メソッドを呼び出し、プロパティー識別子またはプロパティー・タイプのスペース区切りリストを渡します。フィルター・エレメント属性 maxRecursion、maxSize、levelDependents、pageSize の値を渡すこともできます。設定したフィルター・エレメント属性は、PropertyFilter オブジェクトの対応するグローバル属性の値をオーバーライドします。サーバーに作成させるフィルター・エレメントごとに、この手順を繰り返します。
プロパティー・フィルターの使用
単一プロパティーのフェッチ
以下のコード例は、文字列形式とプロパティー・フィルター形式の両方の fetchProperties メソッドを使用して、Document オブジェクトの Reservation プロパティーをフェッチする方法を示しています。
この例で、プロパティー・フィルターには Reservation プロパティーをフェッチするフィルター・エレメントが含まれ、maxRecursion、maxSize、levelDependents、および pageSize の各属性のデフォルト値が使用されています。プロパティー・フィルターのグローバル maxRecursion 属性は 1 に設定されていて、これにより "Reservation" というシンボル名を持ち、現在の再帰レベルが 1 であるすべてのプロパティーが組み込まれます (DocObj オブジェクトの現在の再帰レベルは 0 で、Reservation プロパティーによって返される予約オブジェクトに属するプロパティーの現在の再帰レベルは 2 です)。
Java の例
public static void fetchReservation(
boolean usePropertyFilter,
Document docObj)
{
// プロパティー名配列を定義する
String propNames[] = {"Reservation"};
// フィルター・エレメントを定義する
FilterElement fe
= new FilterElement(null, null, null, propNames[0], null);
// プロパティー・フィルターを定義する
PropertyFilter pf = new PropertyFilter();
pf.addIncludeProperty(fe);
pf.setMaxRecursion(1);
// 予約プロパティーを取得する
if (usePropertyFilter == true)
{
docObj.fetchProperties(pf); // プロパティー・フィルター形式を使用する
}
else
{
docObj.fetchProperties(propNames); // 文字列形式を使用する
}
}
C# の例
public static void FetchReservation(
Boolean usePropertyFilter,
IDocument docObj)
{
// プロパティー名配列を定義する
String[] propNames = {"Reservation"};
// フィルター・エレメントを定義する
FilterElement fe
= new FilterElement(null, null, null, propNames[0], null);
// プロパティー・フィルターを定義する
PropertyFilter pf = new PropertyFilter();
pf.AddIncludeProperty(fe);
pf.SetMaxRecursion(1);
// 予約プロパティーを取得する
if (usePropertyFilter == true)
{
docObj.FetchProperties(pf); // プロパティー・フィルター形式を使用する
}
else
{
docObj.FetchProperties(propNames); // 文字列形式を使用する
}
}
複数のプロパティーのフェッチ
以下のコード例は、DateCreated および DateLastModified プロパティーのほか、すべてのシングルトン・プロパティー (Owner プロパティーは除く) をフェッチする方法を示しています。
Java の例
PropertyFilter pf = new PropertyFilter();
pf.addIncludeProperty(
new FilterElement(null, null, null,
"DateCreated DateLastModified", null));
pf.addIncludeType(
new FilterElement(null, null, null, "Singleton*", null));
pf.addExcludeProperty("Owner");
pf.setMaxRecursion(1);
DocObj.fetchProperties(pf);
C# の例
PropertyFilter pf = new PropertyFilter();
pf.AddIncludeProperty(
new FilterElement(null, null, null,
"DateCreated DateLastModified", null));
pf.AddIncludeType(
new FilterElement(null, null, null, "Singleton*", null));
pf.AddExcludeProperty("Owner");
pf.SetMaxRecursion(1);
DocObj.FetchProperties(pf);
プロパティーの再帰
深度の定義
以下のコード例は、maxRecursion 属性を使用して、プロパティーの関係をフェッチする再帰の深度を定義する方法を示しています。
Java の例
PropertyFilter pf = new PropertyFilter();
pf.setMaxRecursion(1);
pf.addIncludeProperty(new FilterElement(null, null, null, "Reservation Creator", null));
pf.addIncludeProperty(new FilterElement(new Integer(2), null, null, "FoldersFiledIn DateCreated", null));
DocObj.fetchProperties(pf);
C# の例
PropertyFilter pf = new PropertyFilter();
pf.SetMaxRecursion(1);
pf.AddIncludeProperty(new FilterElement(null, null, null, "Reservation Creator", null));
pf.AddIncludeProperty(new FilterElement(2, null, null, "FoldersFiledIn DateCreated", null));
DocObj.FetchProperties(pf);
このプロパティー・フィルターでは、プロパティー・フィルターの maxRecursion グローバル属性は 1 に設定されており、Reservation および Creator プロパティーに適用されています。ただし、FoldersFiledIn および DateCreated プロパティーの maxRecursion グローバル属性は、値 2 を持つフィルター・エレメントの maxRecursion 属性にオーバーライドされます。
以下の Document オブジェクト・プロパティーがフェッチされます (各オブジェクトの現在の再帰レベルは大括弧内に示されています)。
Document オブジェクト #1 [0]
- DateCreated
- Creator
- Reservation: Document オブジェクト #2 [1] を返す
- DateCreated
- Creator
- Reservation: 未評価オブジェクト [2] を返す
- FoldersFiledIn: Folder オブジェクト・コレクション [2] を返す (Document オブジェクト #2 に所属)
- DateCreated
- FoldersFiledIn: Folder オブジェクト [1] を返す (Document オブジェクト #1 に所属)
- DateCreated
- Creator
上記のコード例で、サーバーは以下のタスクを実行します。
- 最上位オブジェクトである document #1 をフェッチします。その現在の再帰レベルは 0 です。
- プロパティー・フィルターで、DateCreated、Creator、Reservation、および FoldersFiledIn の 4 つのプロパティーを分析します。現在の再帰レベル (0) が、これらの各プロパティーの maxRecursion 属性の値より小さいため、これらのすべてのプロパティーの値は返されます。
- Reservation オブジェクトをトラバースします。これによって、Document オブジェクト #2 が返されます。現在の再帰レベルは 1 です。DateCreated、Creator、および FoldersFiledIn プロパティーが返されますが、Reservation プロパティー (このプロパティーは再帰ドキュメント・プロパティーです) は、maxRecursion 属性値が 1 であるため、Reservation オブジェクトではなく、未評価オブジェクトを返します。
- Document オブジェクト #2 の FoldersFiledIn プロパティーをトラバースします。現在の再帰レベルは 2 です。これらのフォルダーに対して返されるプロパティーは DateCreated のみです。Creator は maxRecursion 属性値が 1 であるため返されません。
- Document オブジェクト #1 の FoldersFiledIn プロパティーをトラバースします。現在の再帰レベルは 1 です。各フォルダーの DateCreated および Creator プロパティーの maxRecursion 属性値は 1 以上であるため、これらは返されます。
重複オブジェクトの抑止
プロパティー・フィルターが再帰を強制する場合は、オブジェクト値プロパティーを持つオブジェクトの取得時に、同じオブジェクトに何度も到達する可能性があります。(フォルダーを取得し、Parent プロパティーと SubFolders プロパティーを通して深いレベルの再帰を強制する場合など。) このシナリオでは、サーバー上で再帰の暴走が起こり、メモリーが過度に使用される可能性があります。この再帰を防ぐために、サーバーでは重複するオブジェクトで再帰を終了させて再帰を抑止するメカニズムが使用されます。重複オブジェクトが検出されると、オブジェクト値の代わりにオブジェクト参照が応答に設定されます。
以下のコード例では、Reservation プロパティーを指定するフィルター・エレメントの maxRecursion 属性値が 10 に変更されています。
Java の例
PropertyFilter pf = new PropertyFilter();
pf.setMaxRecursion(1);
pf.addIncludeProperty(new FilterElement(null, null, null, "Creator", null));
pf.addIncludeProperty(new FilterElement(new Integer(2), null, null, "FoldersFiledIn DateCreated", null));
pf.addIncludeProperty(new FilterElement(new Integer(10), null, null, "Reservation", null));
DocObj.fetchProperties(pf);
C# の例
PropertyFilter pf = new PropertyFilter();
pf.SetMaxRecursion(1);
pf.AddIncludeProperty(new FilterElement(null, null, null, "Creator", null));
pf.AddIncludeProperty(new FilterElement(2, null, null, "FoldersFiledIn DateCreated", null));
pf.AddIncludeProperty(new FilterElement(10, null, null, "Reservation", null));
DocObj.FetchProperties(pf);
サーバーは重複オブジェクト検出アルゴリズムを採用し、以下のプロパティーを返します (各プロパティーの現在の再帰レベルは大括弧内に示されています)。
Document オブジェクト #1 [0]
- DateCreated
- Creator
- StorageArea [1]
- DateCreated
- Creator
- Reservation: Document オブジェクト #2 [1] を返す
- DateCreated
- Creator
- Reservation: Document オブジェクト #2 [2] を返す
- FoldersFiledIn: Folder オブジェクト・コレクション [2] を返す (Document オブジェクト #2 に所属)
- DateCreated
- FoldersFiledIn: Folder オブジェクト・コレクション [1] を返す (Document オブジェクト #1 に所属)
- DateCreated
- Creator
この例の結果では、ネストされた Reservation プロパティーがその親 Document オブジェクトを返すことに注目してください。重複オブジェクトの抑止を行わない場合、同じ Document オブジェクトが 1 回ではなく 10 回取得されることになります。
クライアント・アプリケーションでは、重複オブジェクトの抑止は以下の内容を暗黙に示します。
- 返されるデータに循環ループが存在するため、重複の検出を行わずにオブジェクト・ツリーの下位をトラバースするロジックは作成しないでください。
- オブジェクト・ツリーの下位で見つかるオブジェクトのコンテンツは、そのレベルのプロパティー・フィルターと一致しない場合があります。これは、そのオブジェクトより上位にあるオブジェクトへのポインターが返された可能性があるためです。
依存オブジェクト
levelDependents 属性を使用して依存オブジェクトが返されるようにする最も簡単な方法は、空のフィルターを作成し (IncludeProperty、IncludeType、または ExcludeProperty の指定なし)、maxRecursion 属性値を 0 に、levelDependents 属性値を true に設定することです。このプロパティー・フィルターは、オブジェクトのすべてのスカラー・プロパティーと、依存オブジェクトを返すすべてのオブジェクト値プロパティーを返します。
例えば、ContentElement 依存オブジェクトのコレクションを返す、Document オブジェクトの ContentElements プロパティーを想定します。levelDependents 属性が false で、maxRecursion 属性が 0 に設定されている場合、コレクションのエレメントの現在の再帰レベルは 1 であるため、コレクションのエレメントは含まれません。levelDependents 属性が true に変更されると、コレクションのエレメントの現在の再帰レベルがその親 Document オブジェクトの再帰レベルと同じか、あるいは 0 のいずれかになるため、コレクションのエレメントが含まれるようになります。
Java の例
public static void fetchProperties(
Boolean levelDependents,
Document docObj)
{
// 取得するプロパティーを指定する
String propNames
= "DateCreated ContentElements ContentType "
+ "ElementSequenceNumber";
// フィルター・エレメントを定義する
// levelDependents パラメーターの場合:
// TRUE の場合: ContentElements のエレメントはフェッチされる
// FALSE の場合: ContentElements のエレメントはフェッチされない
FilterElement fe = new FilterElement(
null, null, levelDependents, propNames, null);
// フィルター・エレメントを使用してプロパティー・フィルターを定義する
PropertyFilter pf = new PropertyFilter();
pf.addIncludeProperty(fe);
pf.setMaxRecursion(0);
// プロパティー・フィルターに基づいてプロパティーを取得する
docObj.fetchProperties(pf);
}
C# の例
public static void FetchProperties(
Boolean levelDependents,
IDocument docObj)
{
// 取得するプロパティーを指定する
String propNames
= "DateCreated ContentElements ContentType "
+ "ElementSequenceNumber";
// フィルター・エレメントを定義する
// levelDependents パラメーターの場合:
// true の場合: ContentElements のエレメントはフェッチされる
// false の場合: ContentElements のエレメントはフェッチされない
FilterElement fe = new FilterElement(
null, null, levelDependents, propNames, null);
// フィルター・エレメントを使用してプロパティー・フィルターを定義する
PropertyFilter pf = new PropertyFilter();
pf.AddIncludeProperty(fe);
pf.SetMaxRecursion(0);
// プロパティー・フィルターに基づいてプロパティーを取得する
docObj.FetchProperties(pf);
}
levelDependents が false である場合、サーバーは以下のプロパティーを返し、上の例で Document オブジェクトをトラバースするときの現在の再帰レベル (大括弧内に示します) を保持します。
Document オブジェクト [0]
- DateCreated
- ContentElements: 未評価オブジェクト [1] を返す
levelDependents が true である場合、サーバーは以下のプロパティーを返し、上の例で Document オブジェクトをトラバースするときの現在の再帰レベル (大括弧内に示します) を保持します。
Document オブジェクト [0]
- DateCreated
- ContentElements: ContentElement オブジェクト・コレクション [0] を返す
- ContentType
- ElementSequenceNumber