タスク・オブジェクトの操作
以下のコード例は、タスク関連の操作を示しています。タスクの機能の概要については、タスクを参照してください。
タスク・サブクラスの作成
タスク・インスタンスは、基本の CmTask クラスのサブクラスからのみ作成できます。以下の Java™ および C# の例では、CmTask サブクラスの作成方法を示します。 サブクラスの 2 つのシステム・プロパティー定義は デフォルト値を使用して設定され、カスタム・プロパティー定義が追加されます。
Java の例
// 基本タスクのクラス定義をサーバーからフェッチ
ClassDefinition objClassDef = Factory.ClassDefinition.fetchInstance(store, ClassNames.CM_TASK, null);
// CmTask クラスのサブクラスを作成
ClassDefinition objSubClassDef = objClassDef.createSubclass();
// ロケールおよび名前サブクラスを設定する
LocalizedString objLocStr = Factory.LocalizedString.createInstance();
objLocStr.set_LocalizedText("Flood Claim Task Subclass");
objLocStr.set_LocaleName(store.get_LocaleName());
objSubClassDef.set_DisplayNames(Factory.LocalizedString.createList());
objSubClassDef.get_DisplayNames().add(objLocStr);
objSubClassDef.set_SymbolicName("fcTaskSubclass");
// Set default values on PreCondition and PostCondition property definitions.
PropertyDefinitionList objPropDefs = objSubClassDef.get_PropertyDefinitions();
ListIterator iter = objPropDefs.listIterator();
PropertyDefinitionString objPropDef = null;
String objPropDefSymbolicName = null;
// PreCondition および PostCondition が見つかるまでプロパティー定義を反復処理
for (int i=0; i < objPropDefs.size(); i++)
{
objPropDefSymbolicName = ((PropertyDefinition) objPropDefs.get(i)).get_SymbolicName();
if (objPropDefSymbolicName.equalsIgnoreCase("PreCondition"))
{
objPropDef = (PropertyDefinitionString) objPropDefs.get(i);
Property prop = objPropDef.getProperties().get("PropertyDefaultString");
prop.setObjectValue("Coordinator SATISFIES (VersionStatus=1)" );
}
if (objPropDefSymbolicName.equalsIgnoreCase("PostCondition"))
{
objPropDef = (PropertyDefinitionString) objPropDefs.get(i);
Property prop = objPropDef.getProperties().get("PropertyDefaultString");
prop.setObjectValue("Coordinator SATISFIES (ClaimStatus='CLOSED')" );
}
}
/* 既存のカスタム・プロパティー定義をサブクラスに追加
* プロパティー定義の目的を表すようにサブクラスのインスタンスの名前を指定*/
PropertyTemplateString objPropTemplate = Factory.PropertyTemplateString.fetchInstance
(store, new Id("{7C6FF644-285F-44DD-B7B7-5A6080CE1291}"), null);
// プロパティー・テンプレートからプロパティー定義を作成
objPropDef = (PropertyDefinitionString)objPropTemplate.createClassProperty();
// サブクラスに新規プロパティー定義を追加
objPropDefs.add(objPropDef);
// タスク・サブクラスをサーバーに保存
objSubClassDef.save(RefreshMode.REFRESH);
C# の例
// 基本タスクのクラス定義をサーバーからフェッチ
IClassDefinition objClassDef = Factory.ClassDefinition.FetchInstance(store,
GuidConstants.Class_CmTask, null);
// ICmActivity クラスのサブクラスを作成
IClassDefinition objSubClassDef = objClassDef.CreateSubclass();
// ロケールおよび名前サブクラスを設定する
ILocalizedString objLocStr = Factory.LocalizedString.CreateInstance();
objLocStr.LocalizedText = ("Flood Claim Task Subclass");
objLocStr.LocaleName = store.LocaleName;
objSubClassDef.DisplayNames = Factory.LocalizedString.CreateList();
objSubClassDef.DisplayNames.Add(objLocStr);
objSubClassDef.SymbolicName = "fcTaskSubclass";
// Set default values on PreCondition and PostCondition property definitions.
IPropertyDefinitionList objPropDefs = objSubClassDef.PropertyDefinitions;
String objPropDefSymbolicName = null;
// PreCondition および PostCondition が見つかるまでプロパティー定義を反復処理
foreach (IPropertyDefinition objPropDef in objPropDefs)
{
objPropDefSymbolicName = objPropDef.SymbolicName;
if (objPropDefSymbolicName.Equals("PreCondition"))
{
IProperty prop = objPropDef.Properties.GetProperty("PropertyDefaultString");
prop.SetObjectValue("Coordinator SATISFIES (VersionStatus=1)");
}
if (objPropDefSymbolicName.Equals("PostCondition"))
{
IProperty prop=objPropDef.Properties.GetProperty("PropertyDefaultString");
prop.SetObjectValue("Coordinator SATISFIES (ClaimStatus='CLOSED')" );
}
}
/* 既存のカスタム・プロパティー定義をサブクラスに追加
* プロパティー定義の目的を表すようにサブクラスのインスタンスの名前を指定*/
IPropertyTemplateString objPropTemplate = Factory.PropertyTemplateString.FetchInstance(
store, new Id("{7C6FF644-285F-44DD-B7B7-5A6080CE1291}"), null);
// プロパティー・テンプレートからプロパティー定義を作成
IPropertyDefinitionString objPropDefString = (IPropertyDefinitionString)objPropTemplate.CreateClassProperty();
// サブクラスに新規プロパティー定義を追加
objPropDefs.Add(objPropDefString);
// タスク・サブクラスをサーバーに保存
objSubClassDef.Save(RefreshMode.REFRESH);
タスク・インスタンスの作成
タスク・サブクラスからのインスタンスの作成方法を、次の Java および C# の例に示します。
Java の例
// 前の例で作成した task サブクラスからインスタンスを作成
CmTask task = Factory.CmTask.createInstance(store, "FloodClaimTaskSubclass");
// Document オブジェクトを使用して Coordinator プロパティーを設定
Document activityCoordinator = Factory.Document.getInstance(store, ClassNames.DOCUMENT,
new Id("{486F9C7F-DD8C-4EB9-A7CC-98A3A4DAD1EB}"));
task.set_Coordinator(activityCoordinator);
// インスタンスの名前を指定するカスタム・プロパティーを設定
task.getProperties().putValue("taskName", "Flood Claim Task Instance");
// Save task instance to the server.
task.save(RefreshMode.REFRESH);
C# の例
// 前の例で作成した task サブクラスからインスタンスを作成
ICmTask task = Factory.CmTask.CreateInstance(store, "FloodClaimTaskSubclass");
// Document オブジェクトを使用して Coordinator プロパティーを設定
IDocument activityCoordinator = Factory.Document.GetInstance(store, ClassNames.DOCUMENT,
new Id("{486F9C7F-DD8C-4EB9-A7CC-98A3A4DAD1EB}"));
task.Coordinator = activityCoordinator;
// インスタンスの名前を指定するカスタム・プロパティーを設定
task.Properties["taskName"] = "Flood Claim Task Instance";
// タスク・インスタンスをサーバーに保存
task.Save(RefreshMode.REFRESH);
タスク状態の昇格
タスク・インスタンスの状態の昇格方法を、次の Java および C# の例に示します。
Java の例
// 前の例で作成した task インスタンスをフェッチする
CmTask task = Factory.CmTask.fetchInstance(store,
new Id("{D0544111-24FC-4B9E-A905-DFFDBEC733B7}"), null);
// 現在の状態を出力し、タスクを昇格し、新規の状態を出力する
try
{
System.out.println("Current state is " + task.get_TaskState().toString());
task.changeState(LifecycleChangeFlags.PROMOTE);
task.save(RefreshMode.REFRESH);
System.out.println("New state is " + task.get_TaskState().toString());
}
catch (Exception e)
{
System.out.println("Error: " + e.getMessage());
}
C# の例
// 前の例で作成した task インスタンスをフェッチする
ICmTask task = Factory.CmTask.FetchInstance(store,
new Id("{4B8AEBA2-8F3F-4010-AAAC-6BFF64695677}"), null);
// 現在の状態を出力し、タスクを昇格し、新規の状態を出力する
try
{
System.Console.WriteLine("Current state is " + task.TaskState);
task.ChangeState(LifecycleChangeFlags.PROMOTE);
task.Save(RefreshMode.REFRESH);
System.Console.WriteLine("New state is " + task.TaskState);
}
catch (Exception e)
{
System.Console.WriteLine("Error: " + e.Message);
}