プロファイル変更時のエラーと対処方法
概要
プロファイルのインポート/アップデート/参照形式に変換(以下、プロファイ ル変更と記す)を実行時、プロファイルの変更内容によっては不整合が生じてエラーが発生する場合があります。
プロファイルのインポート/アップデート/参照形式に変換を実行時に次のようなメッセージが表示された場合は、ログフォルダ内にある最新のログファイルの内容を確認して以下の説明を参考に対処方法をご検討ください。
対処方法が分からない場合は、サポート窓口(ndsupport@denso-create.jp)宛メールにログファイルを添付してお問い合わせください。
ログファイルの説明
- ログファイルの2行目には、エラー原因を判別するためのエラーメッセージが出力されます。(例:
継承関係を循環させることはできません。
) - ログファイル後半の
--- Detail ---
以降には、エラーに関与しているメタモデル定義を特定するためのID
やName
などが出力されます。
ログファイルの例:
20241223211801: Logging from NextDesign.App.Services.ProjectService: プロファイルのインポートを中断しました。
継承関係を循環させることはできません。 DensoCreate.Indio.IMF.Model.Service.Refactor.CircularGeneralizationException: 継承関係を循環させることはできません。
at DensoCreate.Indio.IMF.Model.Service.Refactor.MetamodelRefactor.AddSuperClass(IMLClass targetClass, IMLClass superClass, Int32 index, Boolean shouldClearCache, Boolean force)
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Strategies.GeneralizationInfoMergeStrategy.AddTargetItem(GeneralizationInfo referenceItem, NewItemDifference difference, MetamodelRefactor refactor)
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Strategies.GeneralizationInfoMergeStrategy.InternalMerge(GeneralizationInfoMatch match, IDifference difference, Role destination)
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Strategies.GeneralizationInfoMergeStrategy.Merge(IDifference difference, Role destination)
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Differences.DifferenceBase.Merge(Role destination)
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Impl.ProfileMergeOperation.<>c.<InternalExecute>b__1_0(IDifference d)
at System.Collections.Generic.List`1.ForEach(Action`1 action)
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Impl.ProfileMergeOperation.InternalExecute()
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Impl.MergeOperationBase`1.Execute()
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Impl.ComparisonBase.Merge()
at DensoCreate.Indio.IMF.Model.Service.DiffMerge.Impl.IMLDiffMerge.MergeProfiles(IProfileComparison comparison)
at NextDesign.App.Services.ProjectService.MergeProfiles(IModelContext referenceContext, Profile profile)
at NextDesign.App.Services.ProjectService.ImportProfile(String filepath)
--- Detail ---
[Specific Class]
ID=7001356a-f10c-4a82-a3d0-60a55a812632
TargetType=EntityClass
Name=A
Location=MyProfile.RefactorErrorNotificationTest.MyPackage
[General Class]
ID=aab17118-1759-4b5d-8f0e-0b0a93882082
TargetType=EntityClass
Name=C
Location=MyProfile.RefactorErrorNotificationTest.MyPackage
エラーメッセージと対処方法
ログファイル中のエラーメッセージごとに、考えられる原因と対処方法を示します。
- 継承関係を循環させることはできません。
考えられる原因
プロジェクトでクラス間の継承関連を追加している。対象に指定したプロファイルで別の継承関連を追加している。 その状態からプロファイル変更を実行しようとすると継承関連が循環してしまう。
例:(左)現状のプロジェクト、(右)対象に指定したプロファイル
対処方法
プロファイル変更の結果としてクラス間の継承関連が循環しないように、事前に継承関連を変更してからプロファイル変更を実行してください。
- 同名のフィールド"FieldX"をもつクラス"ClassA"とクラス"ClassB"の両方を継承することはできません。
考えられる原因
プロジェクトでクラス"ClassA"にあるフィールドと同名のフィールドをクラス"ClassB"に追加している。対象に指定したプロファイルで継承関連が追加されている。 その状態からプロファイル変更を実行しようとすると同名のフィールドが重複してしまう。
例:(左)現状のプロジェクト、(右)対象に指定したプロファイル
対処方法
継承元クラス間でフィールド名が重複しないように変更してからプロファイル変更を実行してください。
- クラス"ClassA"に同名のフィー ルド"FieldX"が存在するため追加できません。
考えられる原因
プロジェクトと対象に指定したプロファイルのそれぞれで継承先のクラス"ClassA"にオーバーライドフィールド"FieldX"(*1)が追加されている。 その状態からプロファイル変更を実行しようとすると同名のオーバーライドフィールドが重複してしまう。
(*1) オーバーライドフィールドとは、継承元のクラスに定義されているフィールドと同じ名前で継承先のクラスに定義するフィールドです。フィールドの表示名を継承先のクラスで変更する際に利用します。
例:(左)現状のプロジェクト、(右)対象に指定したプロファイル
説明:同名のオーバーライドフィールドだが別々のタイミングで追加されており内部の ID が異なる。
対処方法
プロジェクトに追加したオーバーライドフィールドを削除してからプロファイル変更を実行してください。
- フィールド"ClassA.FiledX"の名前を正しく取り込めませんでした。
考えられる原因
プロジェクトでクラス間の継承関連が追加され、対象に指定したプロファイルで同名の別フィールドが追加されている。 その状態からプロファイル変更を実行しようとするとクラス"ClassA"のフィールド"FieldX"が重複回避のために別名"FieldX_2"に置き換えられることで対象に指定したプロファイルと一致しなくなる。
例:(左)現状のプロジェクト、(右)対象に指定したプロファイル
対処方法
次のいずれかの方法でフィールド名の重複を回避してからプロファイル変更を実行してください。
- プロジェクトで追加した継承関連を削除する。
- プロファイルで追加したフィールドの名前を別名に変更する。
- "ClassA"のエディタ"ViewX"に対象フィールドが重複する子要素があります。
考えられる原因
プロジェクトと対象に指定したプロジェクトのそれぞれで、クラス"ClassA"のビュー定義"ViewX"に対して同じフィールドを対象とする要素が追加されている。 その状態からプロファイル変更を実行しようとするとビュー定義の要素が重複してしまう。
例:(左)現状のプロジェクト、(右)対象に指定したプロファイル
説明:クラス"Diagram"のビュー定義"ER"にポートシェイプ"Port"が追加されている。
対処方法
プロジェクトで追加しているビュー定義の該当要素を削除してからプロファイル変更を実行してください。
ただし、ビュー定義の該当要素を削除すると、ビュー上での見た目の情報が消失することに注意ください。(例:ERダイアグラムのシェイプ位置やスタイル設定など)
- "ProfileX"に"PackageC"と名前が重複する要素があるため復元できません。
考えられる原因
プロジェクトでプロファイル"ProfileX"にあったパッケージ"PackageC"を移動させて同名の別パッケージ"PackageC"を追加している。 その状態からプロファイルを参照形式に変換しようとするとパッケージ名が重複してしまう。
例:(左)現状のプロジェクト、(右)対象に指定したプロファイル
説明:パッケージ"システム開発プロファイル"の下にあったパッケージ"PackageC"がパッケージ"MyPackage"の下に移動されていて、同名の別パッケージ"PackageC"が追加されている。
対処方法
プロジェクトで追加した同名の別パッケージの名前を別名に変更してからプロファイルの参照形式に変換を実行してください。
- "PackageA"に"ClassB"と名前が重複する要素があるため復元できません。
考えられ る原因
プロジェクトでパッケージ"PackageA"にあったクラス"ClassB"を別パッケージに移動して同名の別クラス"ClassB"を追加している。 その状態からプロファイルを参照形式に変換しようとするとクラス名が重複してしまう。
例:(左)現状のプロジェクト、(右)対象に指定したプロファイル
説明:パッケージ"PackageA"にあったクラス"ClassB"がパッケージ"MyPackage"に移動されていて、同名の別クラス"ClassB"が追加されている。
対処方法
プロジェクトで追加した同名の別クラスの名前を別名に変更してからプロファイルの参照形式に変換を実行してください。
- ビュー定義の構造が変更された要素は変換できません。
考えられる原因
プロジェクトでビュー定義の要素を異なる構造(コンパートメントシェイプなど)に変更している。 その状態からプロファイルを参照形式に変換しようとすると変換できない。
例:(左)現状のプロジェクト、(右)対象に指定したプロファイル
説明:ビュー定義"ER"のシェイプ定義"A"の種類がタイトル付きシェイプからコンパートメントシェイプに変更されている。
対処方法
プロジェクトで変更したビュー定義の要素を元の構造に戻してからプロファイルの参照形式に変換を実行してください。
上記以外のエラーが発生した場合は、前述の通り、サポート窓口宛にメールでお問い合わせください。