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

Windchill & VBA 03) - Get Product Name

by ToolBOX01 2024. 6. 30.
반응형

□ 소개

Windchill PDMLink의 제품 (Product Name)을 가져오는 프로그램 입니다. jsonconvert 프로그램을 설치 해야 합니다.
This is a program to get the product (Product Name) of Windchill PDMLink. You need to install the jsonconvert program.

Rest API를 사용 하기 위해서는 JSON 구조를 이해해야 합니다. 
 You need to understand the JSON structure to use Rest API.

자세한것은 아래 블로그를 참고 합니다

 

[엑셀 크롤링] JSON 데이터 다루기 (기본 셋업)

안녕하세요. 하날리야입니다. 오늘은 크롤링을 하면서 웹 상에서 자주 등장하는 데이터 형태인 'JS...

blog.naver.com

 


▷ NonceToken Module 

전역 함수로 정의 합니다. "wc address"는 Windchill PDMLink 주소 입니다. 최초 접속시 ID와 비번을 입력 해야 합니다.
Defined as a global function. "wc address" is the Windchill PDMLink address. You must enter your ID and password when connecting for the first time.

json 구조로 결과 값을 가져옵니다, (전문 용어 : Parsing) jsonCover 모듈로 일반 문자로 변환 합니다.
Get the result value in json structure (technical term: Parsing) and convert it to plain characters with jsonCover module.

토큰 값은 "csrfToken" 변수에 저장 됩니다 .
The token value is stored in the "csrfToken" variable. 

Option Explicit
Public xmlhttp As Object
Public responseJson As String
Public NonceTorken As Object
Public csrfToken As String

Public Sub GetToken001()
    
    '// MSXML2.XMLHTTP.6.0 객체를 만듭니다.
        Set xmlhttp = CreateObject("MSXML2.XMLHTTP.6.0")

    '// 요청 메서드를 GET으로 설정합니다.
    xmlhttp.Open "GET", "http://WC address/Windchill/servlet/odata/PTC/GetCSRFToken()", False

    '// 요청 헤더를 설정합니다.
    xmlhttp.SetRequestHeader "Content-Type", "application/json"
    xmlhttp.SetRequestHeader "Accept", "application/json"

    '// 요청을 보냅니다.
    xmlhttp.Send

     '// 응답 상태를 확인합니다.
         If xmlhttp.status = 200 Then
            
            '// 응답 JSON을 가져옵니다.
            responseJson = xmlhttp.responseText
            
            '// JSON을 파싱합니다. (JsonConverter가 필요합니다)
            Set NonceTorken = JsonConverter.ParseJson(responseJson)
            
            '// CSRF 토큰값을 가져옵니다.
            csrfToken = NonceTorken("NonceValue")
            
                       
           '// Debug.Print NonceTorken("NonceKey")
           '// Debug.Print NonceTorken("NonceValue")
            
        Else
            ' //오류 처리
            MsgBox "Error: " & xmlhttp.status
        End If

End Sub

 

 

▷ 제품 이름 가져오는 프로그램 (Program to get product name)

Windchill PDMLink에 토큰과 제품 이름 요청을 함께 보내면,  Json 데이터 구조로 값을 가져올수 있습니다.
If you send a request to Windchill PDMLink along with a token and a product name, you can retrieve the values ​​as a JSON data structure.

이것을 jsonCover 모듈로 변환 합니다. (배열의 형태로 변환 됩니다)
Convert this to jsonCover module (it will be converted to array form)

변환것을 이용하여 엑셀 파일에 자동 입력 합니다
Automatically input into Excel file using conversion

Option Explicit
Sub ProductName01()

        '// 오류 발생 시 오류 메시지 출력 (Output error message when an error occurs)
        On Error Resume Next
        
        Call MainGetToken.GetToken001
     
       '// 변수 (variable)
        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 settings)
        Url = "http://WC address:80/Windchill/servlet/odata/v6/DataAdmin/Containers?$count=false"
       
            
        '// 서버 연결 9Server connection)
        xmlhttp.Open "GET", Url, False
        
        '//요청 헤더 설정 (Setting request headers)
        xmlhttp.SetRequestHeader "Content-Type", "application/json"
        xmlhttp.SetRequestHeader "CSRF_NONCE", NonceTorken("NonceValue")
        
         '//요청 보내기(Send Request)
        xmlhttp.Send requestBody
    
        '// 오류 발생 시 디버그 창에 오류 메시지 출력 
        '// (Output error message to debug window when error occurs10
        If Err.Number <> 0 Then
            Debug.Print "Error " & Err.Number & ": " & Err.Description
            On Error GoTo 0
            Exit Sub
        End If
    
        '// 응답 상태 코드 가져오기(Get response status code)
        status = xmlhttp.status
        
        '// 응답 텍스트 가져오기 (Get response text)
        GetresponseText = xmlhttp.responseText
        
        '// JSON 파싱 (JSON Parsing)
        Set jsonObject = JsonConverter.ParseJson(GetresponseText)
        
        '// 데이터 엑셀에 출력(Output data to Excel)
                i = 1
                j = 1
                For Each jsonItem In jsonObject("value")
                          If jsonItem("@odata.type") = "#PTC.DataAdmin.ProductContainer" Then
                                
                               Worksheets("product").Cells(j + 4, "A") = j
                               Worksheets("product").Cells(j + 4, "B") = jsonItem("ID")
                               Worksheets("product").Cells(j + 4, "C") = jsonItem("Name")
                                j = j + 1
                            
                           End If
                   i = i + 1
                Next jsonItem
        
        '// 응답 상태 및 텍스트 출력 (디버깅 용도)
        '// Response status and text output (for debugging purposes)
        '//Debug.Print "Status: " & status
        '//Debug.Print "Response: " & GetresponseText
        
        '// 정리 작업 (Clean up work)
        Set xmlhttp = Nothing

End Sub

프로그램 실행 결과
Program execution results

 

▷ 제품 과 기본 폴더 ID 표시 (Display product and base folder IDs)

 

Windchill & VBA 03) - Get Product & Default Name

□ ProductName01 CodeOption ExplicitSub ProductName01() '// 오류 발생 시 오류 메시지 출력 On Error Resume Next Call MainGetToken.GetToken001 '// 변수 Dim xmlhttp As Object Set xmlhttp = CreateObject("MSXML2.XMLHTTP.6.0") Dim Url As String Di

tool-2020.tistory.com

'VBA For Windchill' 카테고리의 다른 글

Windchill & VBA 04) - Create a Windchill Folder  (1) 2024.07.03
Windchill REST Services (WRS)  (0) 2024.07.01
VBA Web Parsing 2/2  (0) 2024.06.30
HTTP  (0) 2024.06.30
DOM (Document Object Model) 이란?  (0) 2024.06.30