반응형
□ 소개
Windchill PDMLink의 제품 (Product Name)을 가져오는 프로그램 입니다. jsonconvert 프로그램을 설치 해야 합니다.
Rest API를 사용 하기 위해서는 JSON 구조를 이해해야 합니다. 또한 제 3자가 개발한 프로그램 을 설치 해야 합니다.
자세한것은 아래 블로그를 참고 합니다
또한 토큰 발생 함수를 만들어 사용 합니다. (Rest-API 사용을 위해서는 Windchill PDMLink 관리자의 지원을 받습니다)
▷ NonceToken 모듈
전역 함수로 정의 합니다. "wc주소"는 Windchill PDMLink 주소 입니다. 접속기 ID와 비번을 입력 해야 합니다.
json 구조로 결과 값을 가져옵니다, (전문 용어 : Parsing) jsonCover 모듈로 일반 문자로 변환 합니다.
토큰 값은 "csrfToken" 변수에 저장 됩니다 .
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주소/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")
'//Worksheets("제품_Name").Cells(1, "C") = NonceTorken("NonceKey")
'//Worksheets("제품_Name").Cells(2, "C") = NonceTorken("NonceValue")
'//CSRF 토큰을 사용합니다.
'// MsgBox "CSRF Token: " & csrfToken
'// Debug.Print NonceTorken("NonceKey")
'// Debug.Print NonceTorken("NonceValue")
Else
' //오류 처리
MsgBox "Error: " & xmlhttp.status
End If
End Sub
▷ 제품 이름 가져오는 프로그램
REST API 사용 문서에 나오는 URL 주소를 사용 하여 Windchill PDMLink 서버로 토큰과 함깨 보내면, Json 데이터 구조로 값을 가져올수 있습니다. 이것을 jsonCover 모듈로 변환 합니다. (배열의 형태로 변환 됩니다) 변환것을 이용하여 엑셀 파일에 자동 입력 합니다
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주소:80/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)
'// 데이터 엑셀에 출력
i = 1
j = 1
For Each jsonItem In jsonObject("value")
If jsonItem("@odata.type") = "#PTC.DataAdmin.ProductContainer" Then
Worksheets("제품_Name").Cells(j + 4, "A") = j
Worksheets("제품_Name").Cells(j + 4, "B") = jsonItem("ID")
Worksheets("제품_Name").Cells(j + 4, "C") = jsonItem("Name")
j = j + 1
End If
i = i + 1
Next jsonItem
'// 응답 상태 및 텍스트 출력 (디버깅 용도)
'//Debug.Print "Status: " & status
'//Debug.Print "Response: " & GetresponseText
'// 정리 작업
Set xmlhttp = Nothing
End Sub
프로그램 실행 결과
'VBA For Windchill' 카테고리의 다른 글
학습 04) Open API, 엑셀 VBA - WC 폴더 만들기 (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 |