仕事のカタマリにようこそ!  [ ログイン | ユーザ登録 ]
フォーラムから検索

機械用3D-CAD SolidWorks非公認のユーザサイトです
 
 
Web katamari.org
仕事のカタマリ
ホーム リンク集 ダウンロード フォーラム(掲示板) FAQ お問い合わせ









フォーラムニュース: 質問、相談カテゴリに「SolidWorks操作方法」に関するフォーラムを追加しました。(2003/11/27)
いらっしゃい、 ゲストさん. まずはこちら→ ログイン または 登録. 2024/04/20 - 14:26:44
ホーム ヘルプ 検索 ログイン 登録

仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: EPDMのBomColumn取得について 前のトピック 次のトピック
ページ: [1] Page Bottom 返信 返信のお知らせ Print 
   著者  トピック: EPDMのBomColumn取得について  (閲覧数 1816 回)
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用プログラムの幅が広がりそうです!
ありがとうございました!

議長に報告する   記録済み
ページ: [1] Page Top 返信 返信のお知らせ Print 
仕事のカタマリ 掲示板  |  SolidWorks一般  |  SolidWorksのカスタマイズ (議長: webmaster)  |  トピック: EPDMのBomColumn取得について 前のトピック 次のトピック
ジャンプします: