ZAKRELLO
Jr. メンバー
オフライン
投稿: 12
I'm a llama!
|
|
カスタムプロパティ取得
« 投稿日: 2010/02/09 - 12:57:58 » |
|
こんにちは
図面ファイル(slddrw)のカスタムプロパティをAPIで取得したいのですが、うまくいきません。 SolidWorks Document Manager API でSwDMSheet::GetInvisibleCustomProperty を利用すれば取得できるかと思ったのですが、まずSwDMSheetオブジェクトが取得できませんでした。
図面ファイルにはシートに対してカスタムプロパティがあって、このシートに対するプロパティを取得したいです。 別の手段(API)でカスタムプロパティを取得する方法などご存知の方おられましたら、 ご教授のほどよろしくお願いします。
-ちなみに上手くいかないコード------------------------------------------------------- Dim Classfac As SwDMClassFactory Dim swDocMgr As SwDMApplication Dim swDoc As SwDMDocument Dim swDoc4 As SwDMDocument4 Dim swDoc10 As SwDMDocument10 Dim nretval As Long
' Instantiate a SolidWorks Document Manager session. Classfac = CreateObject("SwDocumentMgr.SwDMClassFactory") swDocMgr = Classfac.GetApplication("Key")
swDoc = swDocMgr.GetDocument(strPath, SwDmDocumentType.swDmDocumentDrawing, True, nretval)
'アクティブシート名の取得、シート数の取得 swDoc4 = swDoc Dim strActiveSheetName As String = swDoc4.GetActiveSheetName() ' ← 正しく取得できる Dim nSheetCount As Integer = swDoc4.GetSheetCount ' ← Sheet数は、正しく取得できる
'シートの取得 swDoc10 = swDoc Dim objSheets As Object = swDoc10.GetSheets() ' ← ここで Nothing が返る For nIndex As Integer = 0 To nSheetCount - 1
Dim swDMSheet As SwDMSheet swDMSheet = objSheets(nIndex) 'アクティブシートに対するプロパティ取得 If swDMSheet.Name = strActiveSheetName Then Dim nCusPropCount As Integer = swDMSheet.GetInvisibleCustomPropertyCount() Dim nCusPropNames As Object = swDMSheet.GetInvisibleCustomPropertyNames()
For i As Integer = 0 To UBound(nCusPropNames) Dim vPropName As String = nCusPropNames(i) Dim vPropType As SwDocumentMgr.SwDmCustomInfoType Dim vPropValue As String = swDMSheet.GetInvisibleCustomProperty(vPropName, vPropType) Debug.Print("vPropName = " & vPropName & " vPropValue = " & vPropValue & " vPropType = " & vPropType) Next i
End If Next nIndex --------------------------------------------------------------------------
開発環境 VB.NET 2005 SolidWorks 2009 SP0.0 SolidWorks Enterprise PDM 9.0
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:カスタムプロパティ取得
« 返信 #1 投稿日: 2010/02/09 - 17:12:20 » |
|
ZAKRELLOさん、こんにちは。
SolidWorks Document Manager APIのサンプルプログラムをダウンロードページにのっけてありますので、 そちらを参照してみてください。
あと、SW2008からSDM1.0ライブラリが使えない!?の情報なども参考にしてみてください。
|
|
|
|
ZAKRELLO
Jr. メンバー
オフライン
投稿: 12
I'm a llama!
|
|
Re:カスタムプロパティ取得
« 返信 #2 投稿日: 2010/02/12 - 12:07:10 » |
|
Makoronさん
いつもありがとうございます。返信遅くなりましてすいません。 サンプルプログラムは既に参考にさせていただいていました。 コンフィグレーションのカスタムプロパティの取得は未対応となっていました。
私の表現がよくなかったと思います。 やりたかったことは、PDMのカード情報を取得したいんです。 図面ファイル(slwdrw)だとシートごとにカードがあるので、 シートに対するカードのデータを取得したかったんです。
私の認識では、PDMのカードデータはカスタムプロパティのことで、 カスタムプロパティを取得するAPIでPDMカードデータが取得できると考えました (サンプルプログラムを動かしたところカードで入力したデータが取得できていたので、)。 これが間違いなのかも知れません。
まだ、ちょっとやりたいことを実現できていません。調査/試行中です。 お忙しいところ対応いただき本当にありがとうございます。 またアドバイスがあったら、よろしくお願い致します。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:カスタムプロパティ取得
« 返信 #3 投稿日: 2010/02/16 - 14:38:11 » |
|
ZAKRELLOさん、こんにちは。
引用:私の表現がよくなかったと思います。 やりたかったことは、PDMのカード情報を取得したいんです。 図面ファイル(slwdrw)だとシートごとにカードがあるので、 シートに対するカードのデータを取得したかったんです。
私の認識では、PDMのカードデータはカスタムプロパティのことで、 カスタムプロパティを取得するAPIでPDMカードデータが取得できると考えました (サンプルプログラムを動かしたところカードで入力したデータが取得できていたので、)。 これが間違いなのかも知れません。 |
この内容については、多少違っているところがあります。
『SWのカスタムプロパティ』と『EntPDMのカード(変数)データ』は同じものではありません。 『SWのカスタムプロパティ』の値を『EntPDMの変数』にマッピングすることが出来て、 そのマッピングされた『EntPDMの変数』を『EntPDMのカード』に表示できる。 ということが正しい動作になります。 (まあ、このあたりもPDMの環境構築のしかたで変わってきますが・・・)
また、EntPDMで表示される図面のシート情報は、SolidWorksのカスタムプロパティでは管理されておらず、 EntPDMだけが持っている情報になります。 そのため、SolidWorks Document Manager APIではこの図面シートの情報を読み取ることが出来ません。
さらに、PDMボルト内に入っているSolidWorksファイルをプログラムなどで直接操作してしまうと、PDM動作に問題が出てしまう可能性もあります。 出来るだけ、PDMのAPIを使って操作できるものはそちらを利用したほうが良いと思います。 たとえば、チェックイン/チェックアウトや、ステータス、アクセス権なども考慮したカスタマイズも行うことが出来ます。
と、前置きが長くなりましたが、 EntPDMのAPIを使ったサンプル(情報を取得するためだけですが)を Webmasterさんにダウンロードページに公開していただいたので、 そちらを参考に、EntPDMの情報を直接取得してみてはいかがでしょうか?
『EnterprisePDMExplorer 未完成版』
|
|
|
|
ZAKRELLO
Jr. メンバー
オフライン
投稿: 12
I'm a llama!
|
|
Re:カスタムプロパティ取得
« 返信 #4 投稿日: 2010/02/26 - 13:36:21 » |
|
Makoronさん
いつもお世話になっております。 このサイトを訪れるのがご無沙汰になっており、Makoronさんの回答を見れていませんでした。 その間、いろいろ調べたり試したりしているうちに、Makoronさんが説明してくれた認識にいたりました。
引用: 『SWのカスタムプロパティ』と『EntPDMのカード(変数)データ』は同じものではありません。 『SWのカスタムプロパティ』の値を『EntPDMの変数』にマッピングすることが出来て、 そのマッピングされた『EntPDMの変数』を『EntPDMのカード』に表示できる。
|
EntPDM APIを使って欲しい情報を手に入れられました。 Makoronさんのサンプルは私の環境(EntPDM 2008)では動きませんでした。が サンプルコード参考にさせていただきます。
ありがとうございます!
|
|
|
|