본문 바로가기
  • Welcome!
VBA For Windchill

Windchill & VBA 05) Get Folder Name

by ToolBOX01 2024. 8. 2.
반응형

□ 제품에 포함된 Folder 이름 가져오기 (Get Folder Names Included in the Product)

제품에는 기본 Folder가 있습니다. 기본 Folder 아래에 사용자가 정의한 Folder들이 있습니다.
The product has a default Folder. Under the default Folder, there are user-defined Folders.

WRS를 이용하여 URL 주소 및 기능을 테스트 합니다
Test URL addresses and functionality using WRS

EX)

 Url = "http://WC Adress/Windchill/servlet/odata/v6/DataAdmin/Containers('" & ProductIDInput & "')/Folders?%24count=true"

 

ProductIDInput = Worksheets("Folder Name").Cells(2, "E").Value

[ ProductIDInput ]

□ Code #1

기본 Folder의 ID를 "ProductFolderID"에 저장하는 코드 입니다
This is the code to save the ID of the default folder to "ProductFolderID"

Option Explicit
Public ProductIDInput As String
Public ProductFolderID As String
Sub FolderName01()

        '// 오류 발생 시 오류 메시지 출력
        On Error Resume Next
        
        Call MainGetToken.GetToken001
     
       '// 변수
        Dim xmlhttp As Object
        Set xmlhttp = CreateObject("MSXML2.XMLHTTP.6.0")
        Dim Url As String
        Dim requestBody As String
        Dim GetresponseText As String
        Dim status As Integer
        Dim jsonObject As Object
        Dim jsonItem As Object
        Dim ProductType As String
        
        ProductIDInput = Worksheets("Folder Name").Cells(2, "E").Value
    
         '// URL 설정
        Url = "http://WC Adress/Windchill/servlet/odata/v6/DataAdmin/Containers('" & ProductIDInput & "')/Folders?%24count=true"

            
        '// 서버와의 연결 열기
        xmlhttp.Open "GET", Url, False
        
        '//요청 헤더 설정
        xmlhttp.SetRequestHeader "Content-Type", "application/json"
        xmlhttp.SetRequestHeader "CSRF_NONCE", NonceTorken("NonceValue")
        
         '//요청 보내기
        xmlhttp.Send requestBody
    
        '// 오류 발생 시 디버그 창에 오류 메시지 출력
        If Err.Number <> 0 Then
            Debug.Print "Error " & Err.Number & ": " & Err.Description
            On Error GoTo 0
            Exit Sub
        End If
    
        '// 응답 상태 코드 가져오기
        status = xmlhttp.status
        
        '// 응답 텍스트 가져오기
        GetresponseText = xmlhttp.responseText
        
        '// JSON 파싱
        Set jsonObject = JsonConverter.ParseJson(GetresponseText)
        
        '// ProductFolderID 출력

                For Each jsonItem In jsonObject("value")
                              
                              ProductFolderID = jsonItem("ID")

                Next jsonItem
                
        '// 정리 작업
        Set xmlhttp = Nothing

End Sub

 

□ Code #2

"ProductFolderID" 폴더 안에 있는 폴더 이름들을 표시 합니다.
Displays the folder names inside the "ProductFolderID" folder.

Sub FolderName02()

        '// 오류 발생 시 오류 메시지 출력
        On Error Resume Next
        
        Call FolderName01
     
       '// 변수
        Dim xmlhttp As Object
        Set xmlhttp = CreateObject("MSXML2.XMLHTTP.6.0")
        Dim Url As String
        Dim requestBody As String
        Dim GetresponseText As String
        Dim status As Integer
        Dim jsonObject As Object
        Dim jsonItem As Object
        Dim ProductType As String
        Dim j As Integer
        
    
         '// URL 설정
        Url = "http://WC Adress/Windchill/servlet/odata/v6/DataAdmin/Containers('" & ProductIDInput & "')/Folders('" & ProductFolderID & "')/Folders?%24count=true"

            
        '// 서버와의 연결 열기
        xmlhttp.Open "GET", Url, False
        
        '//요청 헤더 설정
        xmlhttp.SetRequestHeader "Content-Type", "application/json"
        xmlhttp.SetRequestHeader "CSRF_NONCE", NonceTorken("NonceValue")
        
         '//요청 보내기
        xmlhttp.Send requestBody
    
        '// 오류 발생 시 디버그 창에 오류 메시지 출력
        If Err.Number <> 0 Then
            Debug.Print "Error " & Err.Number & ": " & Err.Description
            On Error GoTo 0
            Exit Sub
        End If
    
        '// 응답 상태 코드 가져오기
        status = xmlhttp.status
        
        '// 응답 텍스트 가져오기
        GetresponseText = xmlhttp.responseText
        
        '// JSON 파싱
        Set jsonObject = JsonConverter.ParseJson(GetresponseText)
        

         j = 1
        For Each jsonItem In jsonObject("value")
                              
             Worksheets("Folder Name").Cells(j + 4, "A") = j
             Worksheets("Folder Name").Cells(j + 4, "B") = jsonItem("Name")
             Worksheets("Folder Name").Cells(j + 4, "C") = jsonItem("ID")
             Worksheets("Folder Name").Cells(j + 4, "D") = jsonItem("Description")
             Worksheets("Folder Name").Cells(j + 4, "E") = jsonItem("Location")
             Worksheets("Folder Name").Cells(j + 4, "F") = jsonItem("LastModified")
             j = j + 1
        Next jsonItem
        
         '// 응답 상태 및 텍스트 출력 (디버깅 용도)
        '//Debug.Print "Status: " & status
        '//Debug.Print "Response: " & GetresponseText
                
        '// 정리 작업
        Set xmlhttp = Nothing
        

End Sub

 

□ 제품 이름 가져오기 (Get Product Name)

 

□ 폴더 이름 가져오기 (Get Product Name)