廃棄ポリシーの操作
以下の情報とコード例は、廃棄ポリシーの操作を示しています。廃棄ポリシーの概要については、『廃棄ポリシー』を参照してください。
廃棄ポリシーの作成
以下の Java™ および C# の例では、経過期間が 5 年を超える、却下された企画書の継続的なスイープをスケジュールする CmDisposalPolicy を作成する方法を示します。タイム・スロットがスイープのスケジュールに使用され、CmPolicyControlledSweep オブジェクトに対して設定されています。 サーバーは、自動的に廃棄ポリシーを CmPolicyControlledSweep オブジェクトに関連付けます。関連付けは、CmSweepPolicyRelationship によって表される関係オブジェクトを通じて行われます。
Java の例
static PropertyFilter pf = new PropertyFilter();
...
// Create instance of CmDisposalPolicy.
CmDisposalPolicy disPolicy = Factory.CmDisposalPolicy.createInstance(os);
// Proposal クラスをスイープのターゲットに設定
disPolicy.set_SweepTarget(Factory.ClassDefinition.getInstance(os,new Id("{B03157E9-8E5F-4FAD-A3AE-E163BE77E170}")));
// 経過期間が 5 年を超える、却下された企画書の廃棄を指定
disPolicy.set_FilterExpression("Now() > DateCreated + TimeSpan(1825, 'days') AND Rejected = true");
// 表示名を固有値に設定
disPolicy.set_DisplayName("Disposition Policy for Rejected Proposals");
disPolicy.save(RefreshMode.REFRESH);
// 廃棄ポリシーに関連付けられているポリシー制御スイープを取得
// ポリシーが関連付けられるポリシー制御スイープは 1 つ以内
// したがって、関係セット内のアイテムは 1 つのみ
pf.addIncludeProperty(new FilterElement(0, null, null, "Sweep", null));
PropertyIndependentObjectSet prop = (PropertyIndependentObjectSet) disPolicy.fetchProperty("SweepSubscriptions", pf);
CmSweepPolicyRelationshipSet rs = (CmSweepPolicyRelationshipSet) prop.getIndependentObjectSetValue();
Iterator iter = rs.iterator();
CmPolicyControlledSweep controlledSweep = ((CmSweepPolicyRelationship)iter.next()).get_Sweep();
// ジョブが毎週金曜日の深夜 12 時から 6 時間にわたって実行されるようにタイム・スロットを作成
CmTimeslotList tsList = Factory.CmTimeslot.createList();
CmTimeslot ts = Factory.CmTimeslot.createInstance();
ts.set_Weekday(Weekday.FRIDAY);
ts.set_Duration(Integer.valueOf(360));
ts.set_StartMinutesPastMidnight(Integer.valueOf(0));
tsList.add(ts);
// ポリシー制御スイープにタイム・スロットを設定
controlledSweep.set_SweepTimeslots(tsList);
controlledSweep.save(RefreshMode.REFRESH);
C# の例
static PropertyFilter pf = new PropertyFilter();
...
// Create instance of ICmDisposalPolicy.
ICmDisposalPolicy disPolicy = Factory.CmDisposalPolicy.CreateInstance(os);
// Proposal クラスをスイープのターゲットに設定
disPolicy.SweepTarget = Factory.ClassDefinition.GetInstance(os, new Id("{B03157E9-8E5F-4FAD-A3AE-E163BE77E170}"));
// 経過期間が 5 年を超える、却下された企画書の廃棄を指定
disPolicy.FilterExpression = "Now() > DateCreated + TimeSpan(1825, 'days') AND Rejected = true";
// 表示名を固有値に設定
disPolicy.DisplayName = "Disposition Policy for Rejected Proposals";
disPolicy.Save(RefreshMode.REFRESH);
// 廃棄ポリシーに関連付けられているポリシー制御スイープを取得
// ポリシーが関連付けられるポリシー制御スイープは 1 つ以内
// したがって、関係セット内のアイテムは 1 つのみ
pf.AddIncludeProperty(new FilterElement(0, null, null, "Sweep", null));
IPropertyIndependentObjectSet prop = (IPropertyIndependentObjectSet)disPolicy.FetchProperty("SweepSubscriptions", pf);
ICmSweepPolicyRelationshipSet prSet = (ICmSweepPolicyRelationshipSet)prop.GetIndependentObjectSetValue();
System.Collections.IEnumerator enumerator = prSet.GetEnumerator();
enumerator.MoveNext();
ICmPolicyControlledSweep controlledSweep = ((ICmSweepPolicyRelationship)enumerator.Current).Sweep;
// ジョブが毎週金曜日の深夜 12 時から 6 時間にわたって実行されるようにタイム・スロットを作成
ICmTimeslotList tsList = Factory.CmTimeslot.CreateList();
ICmTimeslot ts = Factory.CmTimeslot.CreateInstance();
ts.Weekday = Weekday.FRIDAY;
ts.Duration = 360;
ts.StartMinutesPastMidnight = 0;
tsList.Add(ts);
// ポリシー制御スイープにタイム・スロットを設定
controlledSweep.SweepTimeslots = tsList;
controlledSweep.Save(RefreshMode.REFRESH);
廃棄ポリシーの取得
以下の Java および C# の例では、オブジェクト・ストアで永続化されているすべての廃棄ポリシーを取得する方法を示します。コードは、オブジェクト・ストアからすべてのスイープ・ポリシーを取得した後、廃棄ポリシーを検索するためにスイープ・ポリシーを反復処理します。次に、コードは、それぞれの廃棄ポリシーに関する情報を出力します。
Java の例
// オブジェクト・ストアで永続化されているスイープ・ポリシーを取得
CmSweepPolicySet spSet = os.get_SweepPolicies();
// スイープ・ポリシー・セットを反復処理
Iterator iter = spSet.iterator();
while (iter.hasNext())
{
CmSweepPolicy sweepPolicy = (CmSweepPolicy) iter.next();
// ポリシーが廃棄ポリシーであるかどうかをテスト
if (sweepPolicy.getClassName().equalsIgnoreCase("CmDisposalPolicy"))
{
// 各ポリシーのポリシー制御スイープを取得
// ポリシーが関連付けられるポリシー制御スイープは 1 つ以内
// したがって、セット内のアイテムは 1 つのみ
CmSweepPolicyRelationshipSet sprSet = sweepPolicy.get_SweepSubscriptions();
Iterator iter2 = sprSet.iterator();
CmPolicyControlledSweep controlledSweep = ((CmSweepPolicyRelationship)iter2.next()).get_Sweep();
System.out.println("Id of controlled sweep: " + controlledSweep.get_Id().toString());
System.out.println("Disposal policy name: " + sweepPolicy.get_DisplayName());
System.out.print("Start date: " + sweepPolicy.get_EffectiveStartDate());
System.out.print(" End date: " + sweepPolicy.get_EffectiveEndDate());
System.out.println(" Enabled?: " + sweepPolicy.get_IsEnabled() );
System.out.print("Examined objects: " + sweepPolicy.get_CurrentExaminedObjectCount());
System.out.print(" Processed objects: " + sweepPolicy.get_CurrentProcessedObjectCount() );
System.out.println(" Failed objects: " + sweepPolicy.get_CurrentFailedObjectCount() + "¥n" );
}
}
C# の例
// オブジェクト・ストアで永続化されているスイープ・ポリシーを取得
ICmSweepPolicySet spSet = os.SweepPolicies;
// スイープ・ポリシー・セットを反復処理
foreach (ICmSweepPolicy sweepPolicy in spSet)
{
// ポリシーが廃棄ポリシーであるかどうかをテスト
if (sweepPolicy.GetClassName().Equals("CmDisposalPolicy"))
{
// 各ポリシーのポリシー制御スイープを取得
// ポリシーが関連付けられるポリシー制御スイープは 1 つ以内
// したがって、セット内のアイテムは 1 つのみ
ICmSweepPolicyRelationshipSet sprSet = sweepPolicy.SweepSubscriptions;
System.Collections.IEnumerator enumerator = sprSet.GetEnumerator();
enumerator.MoveNext();
ICmPolicyControlledSweep controlledSweep = ((ICmSweepPolicyRelationship)enumerator.Current).Sweep;
System.Console.WriteLine("Id of controlled sweep: " + controlledSweep.Id.ToString());
System.Console.WriteLine("Disposal policy name: " + sweepPolicy.DisplayName);
System.Console.Write("Start date: " + sweepPolicy.EffectiveStartDate);
System.Console.Write(" End date: " + sweepPolicy.EffectiveEndDate);
System.Console.Write(" Enabled?: " + sweepPolicy.IsEnabled);
System.Console.Write(" Examined objects: " + sweepPolicy.CurrentExaminedObjectCount);
System.Console.Write(" Processed objects: " + sweepPolicy.CurrentProcessedObjectCount);
System.Console.WriteLine(" Failed objects: " + sweepPolicy.CurrentFailedObjectCount + "¥n");
}
}
廃棄ポリシーの削除
以下の Java および C# の例では、Proposal クラスをターゲットとする廃棄ポリシーを削除する方法を示します。 コードは、SQL 照会を使用して廃棄ポリシーを取得し、結果セットを反復処理して、該当するポリシーを削除します。
Java の例
// SearchSQL インスタンスを作成
SearchSQL sqlObject = new SearchSQL();
sqlObject.setMaxRecords(20);
sqlObject.setFromClauseInitialValue("CmDisposalPolicy", null, true);
// SQL ステートメントを確認
System.out.println("SQL: " + sqlObject.toString());
// SearchScope インスタンスを作成
SearchScope search = new SearchScope(os);
// 指定したパラメーターを使用して fetchObjects メソッドを実行
IndependentObjectSet myObjects = search.fetchObjects(sqlObject, null, null, null);
// 廃棄ポリシーを反復処理し、Proposal クラスをターゲットとする廃棄ポリシーを削除
Iterator iter = myObjects.iterator();
while (iter.hasNext())
{
CmDisposalPolicy policyObject = (CmDisposalPolicy) iter.next();
if (policyObject.get_SweepTarget().get_Name().equalsIgnoreCase("Proposals") )
{
policyObject.delete();
System.out.println(policyObject.get_DisplayName() + " deleted.");
policyObject.save(RefreshMode.REFRESH);
}
}
C# の例
// SearchSQL インスタンスを作成
SearchSQL sqlObject = new SearchSQL();
sqlObject.SetMaxRecords(20);
sqlObject.SetFromClauseInitialValue("CmDisposalPolicy", null, true);
// SQL ステートメントを確認
System.Console.WriteLine("SQL: " + sqlObject.ToString());
// SearchScope インスタンスを作成
SearchScope search = new SearchScope(os);
// 指定したパラメーターを使用して fetchObjects メソッドを実行
IIndependentObjectSet myObjects = search.FetchObjects(sqlObject, null, null, null);
// 廃棄ポリシーを反復処理し、Proposal クラスをターゲットとする廃棄ポリシーを削除
foreach (ICmDisposalPolicy policyObject in myObjects)
{
if (policyObject.SweepTarget.Name.Equals("Proposals") )
{
policyObject.Delete();
System.Console.WriteLine(policyObject.DisplayName + " deleted.");
policyObject.Save(RefreshMode.REFRESH);
}
}