ライセンス交付よりライセンスを取得するマクロ|CATIAマクロの作成方法
今回の記事は「マクロ案」でいただいた内容です。
送って頂いた内容は以下のようなマクロです。
ワークベンチ: パート・デザインorアセンブリー・デザイン
マクロ案: シェアラブルプロダクト(SPAやKWA)
のライセンスへのアクセスを簡素化するマクロを作成したく思って おります。
5~6年程前に下記サイトで話題となっていますが、未解決のままでした…。ご教授いただけたら幸いです。
https://www.eng-tips.com/viewthread.cfm?qid=350925
確かに上記のサイトでは最終的にうやむやになっていますが、どうやら上記サイトに書かれているコードでライセンスの取得が可能なようです。
個人的にライセンス関係のマクロはほとんどわからないので、本ページで紹介するマクロは上記サイトに書かれているコードを国内向け少し書き換えただけのものになっています。
そのため本ページの内容は曖昧な部分が多いと思いますが予めご了承ください。
マクロの機能
※画像はCATIAヘルプのものを引用しています。
(参考:Reserving Shareable Product Licenses Dynamically)
このページで紹介するマクロは上画像の赤枠内にある「ASDライセンス」を取得/解放するマクロです。(※コード自体はMacro to load licens|ENGI-TIPS.COMにあるコードをほとんどそのまま引用したものです。)
コード内の一部を書き換えることである程度はどのライセンスにも対応できそうです。
以下で紹介するコードは実行できる場合とできない場合があるようです。
実行できない場合はおそらく「SetLicense」というメソッドで「Run-time error ‘-2147467259 (80004005)’)」というようなエラーが発生すると思います。
このエラーについてMicrosoftのページを確認すると以下のようなページがありました。
実行時エラー-グラフのプロパティを設定するときに 2147467259 (80004005)|Microsoft
上記ページを要約すると、
Excelのシートに保護がかかっているとマクロ実行時にエラーが起きるという内容になっています。
これと同じエラーということから、以下で紹介するコードが実行できない場合は“おそらく”管理者設定によりCATIAのライセンス関連に何らかの制限がかかっているのかもしれません。(断言はできませんがコードを実行できた知人もいるのでコード自体は間違っていないと思います)
多くの企業では社員が勝手にCATIAの設定をいじくり回せないように管理者設定により個人での設定変更を行えないようにしている場合があります。実行できないのはこれが原因だと勝手に推測しています。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
Sub CATMain() Dim settingControllers1 As SettingControllers Set settingControllers1 = CATIA.SettingControllers Dim memoryWarningSettingAtt1 As SettingController Set memoryWarningSettingAtt1 = settingControllers1.Item("CATSysMemoryWarningSettingCtrl") Dim licenseSettingAtt1 As SettingController Set licenseSettingAtt1 = settingControllers1.Item("CATSysLicenseSettingCtrl") Dim Message, Style, Title, Response, SecString Message = ("ASDライセンスを取得する場合は「はい(Y)」," & vbLf & "解放する場合は「いいえ(N)」をクリックして下さい。") Style = vbYesNo + vbDefaultButton1 'Define default button Title = "Purpose : change status of a specific license " Response = MsgBox(Message, Style, Title) Dim generalSessionSettingAtt1 As SettingController Dim disconnectionSettingAtt1 As SettingController If Response = vbYes Then licenseSettingAtt1.SetLicense "ASD.prd", "ASD.prd" '「ASD」の部分(2箇所)を取得したいライセンス名に書き換える Set generalSessionSettingAtt1 = settingControllers1.Item("CATCafGeneralSessionSettingCtrl") generalSessionSettingAtt1.SaveRepository Set disconnectionSettingAtt1 = settingControllers1.Item("CATSysDisconnectionSettingCtrl") disconnectionSettingAtt1.SaveRepository memoryWarningSettingAtt1.SaveRepository licenseSettingAtt1.SaveRepository Else 'vbNo licenseSettingAtt1.SetLicense "ASD.prd", "NotRequested" '「ASD」の部分(1箇所)を取得したいライセンス名に書き換える Set generalSessionSettingAtt1 = settingControllers1.Item("CATCafGeneralSessionSettingCtrl") generalSessionSettingAtt1.SaveRepository Set disconnectionSettingAtt1 = settingControllers1.Item("CATSysDisconnectionSettingCtrl") disconnectionSettingAtt1.SaveRepository memoryWarningSettingAtt1.SaveRepository licenseSettingAtt1.SaveRepository End If End Sub |
上記コードのコメント文の文字列を変換するだけでいくつかのライセンスは取得可能なことが判明しました。ライセンス関連のオブジェクトについては下記ページを参照してみてください。
r1 LicenseSettingAtt (Object) – CATIADOC
まとめ
今回はCATIAのライセンスを取得するマクロについての内容でした。
今回のマクロで使用していた「LicenseSettingAttオブジェクト」を使うことで現在取得しているライセンスを取得したりすることも可能なようです。ライセンス関連のマクロを作成しようと考えている方はこのオブジェクトについて色々調べてみるとよいと思います。
CATIAマクロを本気で勉強するなら