QWER
カタマリの王様!?
オフライン
投稿: 164
SolidWorks2011 SP5 x64
|
|
EPDMのBomColumn取得について
« 投稿日: 2013/11/28 - 08:45:25 » |
|
------------------------------ Windows7 64Bit SolidWorks2011 SP5 x64 EnterprisePDM 2011 SP3.1 VisualBasic2008 Express Edition ------------------------------ お世話になっております、QWERです。
APIにてEpdmBomの列(Column)情報を取得するタイミングとして、 IEdmFile7にアセンブリファイルのパスを与え、 IEdmBomView = IEdmFile.GetComputedBOM ↓ IEdmBomView.GetColumns と取得する流れが考えられますが、アセンブリファイルを指定せず、 Vaultへアクセスしたタイミングで、列情報を取得する方法が無いか模索しております。
Helpを確認しましたが、それらしいモノを見つけられなかった為、 もしご存じの方がいらっしゃいましたらご教示願います。
よろしくお願い致します。
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:EPDMのBomColumn取得について
« 返信 #1 投稿日: 2013/11/28 - 12:30:20 » |
|
ヘルプ見て考えてみました。 実際に試してないので、動作するかも不明です。
Dim pdmVault As New EdmVault5 Dim pdmBom As IEdmBom = pdmVault.GetObject(EdmObjectType.EdmObject_BOM, ID) Dim pdmBomView As IEdmBomView = pdmBom.GetView(0)
|
|
|
|
QWER
カタマリの王様!?
オフライン
投稿: 164
SolidWorks2011 SP5 x64
|
|
Re:EPDMのBomColumn取得について
« 返信 #2 投稿日: 2013/11/28 - 14:59:28 » |
|
>Makaronさん
お世話になっております、QWERです。 レスありがとうございます!
アドバイス頂いたコードを動作させてみましたが、「IEdmBomView」に値が入って来ませんでした。
他のHelpも参考にし、以下のようにコードを校正してみましたが、 これでもIEdmBomViewに情報が入ってきません...orz
※EdmVault5でログイン済み -----Code----- Dim IEdmVault As EdmLib.IEdmVault7 = EdmVault Dim IEdmBom As EdmLib.IEdmBom Dim IEdmBomView As EdmLib.IEdmBomView Dim IEdmBomMgr As EdmLib.IEdmBomMgr = IEdmVault.CreateUtility(EdmLib.EdmUtility.EdmUtil_BomMgr) Dim ppoRetLayouts() As EdmLib.EdmBomLayout = Nothing Dim ppoRetLayout As EdmLib.EdmBomLayout
IEdmBomMgr.GetBomLayouts(ppoRetLayouts)
Dim I As Integer = 0 Dim ArraySize = ppoRetLayouts.Length While I < ArraySize ppoRetLayout = ppoRetLayouts(I) If ppoRetLayout.mbsLayoutName = "BOM" Then IEdmBom = IEdmVault.GetObject(EdmLib.EdmObjectType.EdmObject_BOM, ppoRetLayout.mlLayoutID) End If I = I + 1 End While
IEdmBomView = IEdmBom.GetView(0) '←ここ Dim ppoColumns() As EdmLib.EdmBomColumn = Nothing IEdmBomView.GetColumns(ppoColumns)
-----Code-----
なお、 Dim pdmBom As IEdmBom = pdmVault.GetObject(EdmObjectType.EdmObject_BOM, ID) の「ID」に「IEdmVault.RootFolderID」を設定してみましたが、 これも上手く行きませんでした。
もう少し、考えてみます!
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:EPDMのBomColumn取得について
« 返信 #3 投稿日: 2013/11/28 - 16:13:09 » |
|
そうですか...うまくいきませんでしたか...
ところでこのプログラムって何を読取ろうとしてるのですかね? ここら辺のプログラム書いたことないので、いまいち理解できてないです...
ぱっと見、アドミンツールにあるBOMに登録されている物の項目名の一覧を取得しているように思えますが、どうでしょう?
もし、項目名であれば、SQLで直接読みに行くと簡単かも知れません。
まず、BOMの名前からColSetID を読み取って SELECT ColSetID FROM CustomColumnSet WHERE SetName='BOM'; 項目名一覧を読み取る SELECT * FROM CustomColumn WHERE ColSetID=(上記SELECT文の結果) ORDER BY ColumnNo; って感じで取ってこれそうです。
|
|
|
|
QWER
カタマリの王様!?
オフライン
投稿: 164
SolidWorks2011 SP5 x64
|
|
Re:EPDMのBomColumn取得について
« 返信 #4 投稿日: 2013/11/28 - 16:54:03 » |
|
>Makaronさん
レス有難うございます。
>ぱっと見、アドミンツールにあるBOMに登録されている物の項目名の一覧を取得しているように思えますが、どうでしょう?
その通りです! 現在、アセンブリファイルのBOMデータから様々な処理を行うフォームアプリケーションを作成中です。 現状、BOMを取得するタイミングで列情報を取得しているのですが、 操作勝手上、このタイミングではスマートでない部分がありまして、試行錯誤している状態です。
SQLの勉強も兼ねて、ご教示頂いた方法を試してみたいと思います!
|
|
|
|
Makoron
カタマリの王様!?
オフライン
投稿: 1277
SW2011SP5.0
|
|
Re:EPDMのBomColumn取得について
« 返信 #5 投稿日: 2013/11/28 - 17:38:40 » |
|
SQLで読取るサンプル作ってみました! (一応動作確認済み)
-----Code----- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim SQLServerHostName As String = "hostname" Dim SQLUserName As String = "sa" Dim SQLPassword As String = "password" Dim EPDMVaultName As String = "pdmname" Dim EPDMBomName As String = "BOM"
Dim BomColumns() As String = GetEpdmBomColumns(SQLServerHostName, SQLUserName, SQLPassword, EPDMVaultName, EPDMBomName)
For i As Integer = 1 To BomColumns.Length - 1 Debug.Print(BomColumns(i)) Next
End Sub
Private Function GetEpdmBomColumns(ByVal SQLServerHostName As String, ByVal SQLUserName As String, ByVal SQLPassword As String, ByVal EPDMVaultName As String, ByVal EPDMBomName As String) As String()
Dim ConnectionString As String = "" ConnectionString &= "Data Source=" & SQLServerHostName & ";" ConnectionString &= "Initial Catalog=" & EPDMVaultName & ";" ConnectionString &= "user=" & SQLUserName & ";" ConnectionString &= "password=" & SQLPassword & ";"
Dim ColSetID As String = "" Using Connection As New System.Data.SqlClient.SqlConnection(ConnectionString) Connection.Open() Dim SQL As String = "SELECT ColSetID FROM CustomColumnSet WHERE SetName='" & EPDMBomName & "';" Dim Command As New SqlClient.SqlCommand(SQL, Connection) Dim Reader As System.Data.SqlClient.SqlDataReader = Command.ExecuteReader() While (Reader.Read()) ColSetID = Reader("ColSetID").ToString End While Reader.Close() Command.Dispose() Connection.Close() End Using
Dim ColumnNames() As String ReDim ColumnNames(0) Dim Count As Integer = 0 Using Connection As New System.Data.SqlClient.SqlConnection(ConnectionString) Connection.Open() Dim SQL As String = "SELECT * FROM CustomColumn WHERE ColSetID=" & ColSetID & " ORDER BY ColumnNo;" Dim Command As New SqlClient.SqlCommand(SQL, Connection) Dim Reader As System.Data.SqlClient.SqlDataReader = Command.ExecuteReader() While (Reader.Read()) Count += 1 ReDim Preserve ColumnNames(Count) ColumnNames(Count) = Reader("ColumnName").ToString End While Reader.Close() Command.Dispose() Connection.Close() End Using
Return ColumnNames End Function -----Code-----
|
|
|
|
QWER
カタマリの王様!?
オフライン
投稿: 164
SolidWorks2011 SP5 x64
|
|
Re:EPDMのBomColumn取得について
« 返信 #6 投稿日: 2013/11/29 - 08:19:52 » |
|
>Makaronさん
>SQLで読取るサンプル作ってみました! すごい! とても参考になります! 頂いたサンプルに少し手を加えるだけで、サーバーから直接、様々なデータを取得できそうな気配が...(・∀・)
EPDM用プログラムの幅が広がりそうです! ありがとうございました!
|
|
|
|