본문 바로가기
  • Welcome!
카테고리 없음

Windchill & VBA 03) - Get Product & Default Name

by ToolBOX01 2024. 8. 3.
반응형

□ ProductName01 Code

Option Explicit
Sub ProductName01()

        '// 오류 발생 시 오류 메시지 출력
        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
        
        Dim i, j As Integer
        

         '// URL 설정
        Url = "http://WC Adress/Windchill/servlet/odata/v6/DataAdmin/Containers?$count=false"
       
            
        '// 서버와의 연결 열기
        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")
                         If jsonItem("@odata.type") = "#PTC.DataAdmin.ProductContainer" Then
                         
                               Worksheets("Product Name").Cells(j + 4, "A") = j
                               Worksheets("Product Name").Cells(j + 4, "B") = jsonItem("Name")
                               Worksheets("Product Name").Cells(j + 4, "C") = jsonItem("ID")
                               Worksheets("Product Name").Cells(j + 4, "E") = jsonItem("@odata.type")
                               Worksheets("Product Name").Cells(j + 4, "F") = jsonItem("CreatedOn")
                               
                                j = j + 1
                                
                          End If
                Next jsonItem
        
        '// 응답 상태 및 텍스트 출력 (디버깅 용도)
        '//Debug.Print "Status: " & status
        '//Debug.Print "Response: " & GetresponseText
        
        '// 정리 작업
        Set xmlhttp = Nothing

End Sub

 

□ ProductName02 Code

       - Call ProductName01

Sub ProductName02()

        '// 오류 발생 시 오류 메시지 출력
        On Error Resume Next
        
        Call ProductName01
     
       '// 변수
        Dim xmlhttp As Object
        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 ProductID As String
        Dim i, j As Integer
                
        Dim rng As Range
        Set rng = Worksheets("Product Name").Range("A5", Cells(Rows.Count, "A").End(xlUp))
        
        For i = 0 To rng.Count - 1
        
            ProductID = Cells(i + 5, "C").Value
            Set xmlhttp = CreateObject("MSXML2.XMLHTTP.6.0")
            Url = "http://WC Adress/Windchill/servlet/odata/v6/DataAdmin/Containers('" & ProductID & "')/Folders"
            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)
              
                              For Each jsonItem In jsonObject("value")
                              
                               Worksheets("Product Name").Cells(i + 5, "D") = jsonItem("ID")
                        
                            Next jsonItem
            
            Set xmlhttp = Nothing
        Next i
        
End Sub

 

□ 프로그램 실행 (Run the program)