Recording Macro Usage On Template Instantiation
Building Catalogs or Library’s for templates is great but unless you know who, when, how, and where those templates are being used its hard to calculate return on investment. The method I like to use is to create a REST API end point either on AWS or AZURE and then on instantiation call the end point and pass some information about that usage. For example in this case were passing:
- Macro Name
- Macro Revision
- User Name
- Computer Name
- Part Number
- Part Revision
- Collaborative Space
- Description
- Comments
The Macro Name and Revision are argument strings being passed into the Action, which is then called on instantiation. Obviously you can pass what ever information you want.
Dim ioCATIA As Application Set ioCATIA = CATIA Dim ioActiveEditor As Editor Set ioActiveEditor = ioCATIA.ActiveEditor On Error Resume Next Dim ioActiveObject As VPMRootOccurrence Set ioActiveObject = ioActiveEditor.ActiveObject Dim ioVPMReference As VPMReference Set ioVPMReference = ioActiveObject.ReferenceRootOccurrenceOf Dim ioVPMRepReference As VPMRepReference ioVPMRepReference = Nothing If (Err.Number <> 0) Then Dim ioPart As Part Set ioPart = ioActiveEditor.ActiveObject Set ioVPMReference = ioPart.Parent.Father If IsEmpty(ioVPMReference) Then Set ioVPMRepReference = ioPart.Parent End If End If On Error GoTo 0 Dim Json As String Dim ioPN, ioRev, ioCollab, ioDesc, ioComm As String ioPN = GetPartNumber(ioVPMReference, ioVPMRepReference) ioRev = GetRevision(ioVPMReference, ioVPMRepReference) ioCollab = GetCollabSpace(ioVPMReference, ioVPMRepReference) ioDesc = GetDescription(ioVPMReference, ioVPMRepReference) ioComm = GetComments(ioVPMReference, ioVPMRepReference) Json = "{" & Chr(34) & "macroName" & Chr(34) & " : " & Chr(34) & TemplateName.ValueAsString & Chr(34) & _ " , " & Chr(34) & "macroRevision" & Chr(34) & " : " & Chr(34) & TemplateRevision.ValueAsString & Chr(34) & _ " ," & Chr(34) & "userName" & Chr(34) & ": " & Chr(34) & GetUserName() & Chr(34) & _ " ," & Chr(34) & "computerName" & Chr(34) & ": " & Chr(34) & GetComputerName() & Chr(34) & _ " ," & Chr(34) & "partNumber" & Chr(34) & ": " & Chr(34) & ioPN & Chr(34) & _ " ," & Chr(34) & "partRevision" & Chr(34) & ": " & Chr(34) & ioRev & Chr(34) & _ " ," & Chr(34) & "collaborativeSpace" & Chr(34) & ": " & Chr(34) & ioCollab & Chr(34) & _ " ," & Chr(34) & "description" & Chr(34) & ": " & Chr(34) & ioDesc & Chr(34) & _ " ," & Chr(34) & "comments" & Chr(34) & ": " & Chr(34) & ioComm & Chr(34) & _ "}" Const APIkey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" 'DO NOT SHARE Dim httpReq As Object Set httpReq = CreateObject("MSXML2.XMLHTTP") Dim rootURL As String, EndpointURL As String rootURL = "https://macro-usage-function.azurewebsites.net" EndpointURL = rootURL & "/api/v1/PostMacroUsageModel" With httpReq .Open "POST", EndpointURL, False .setRequestHeader "Content-type", "application/json" .setRequestHeader "x-functions-key", APIkey .send (Json) End With End Sub Function GetComputerName() As String GetComputerName = CreateObject("WScript.Network").ComputerName End Function Function GetUserName() As String GetUserName = CreateObject("WScript.Network").username End Function Function GetPartNumber(ioVPMReference As VPMReference, ioVPMRepReference As VPMRepReference) As String If IsEmpty(ioVPMRepReference) Then GetPartNumber = ioVPMReference.GetAttributeValue("PLM_ExternalID") Else GetPartNumber = ioVPMRepReference.GetAttributeValue("PLM_ExternalID") End If End Function Function GetRevision(ioVPMReference As VPMReference, ioVPMRepReference As VPMRepReference) As String If IsEmpty(ioVPMRepReference) Then GetRevision = ioVPMReference.GetAttributeValue("revision") Else GetRevision = ioVPMRepReference.GetAttributeValue("revision") End If If (GetRevision = "") Then GetRevision = "A.1" End If End Function Function GetCollabSpace(ioVPMReference As VPMReference, ioVPMRepReference As VPMRepReference) As String If IsEmpty(ioVPMRepReference) Then GetCollabSpace = ioVPMReference.GetAttributeValue("project") Else GetCollabSpace = ioVPMRepReference.GetAttributeValue("project") End If If (GetCollabSpace = "") Then GetCollabSpace = "UnKnown" End If End Function Function GetDescription(ioVPMReference As VPMReference, ioVPMRepReference As VPMRepReference) As String If IsEmpty(ioVPMRepReference) Then GetDescription = ioVPMReference.GetAttributeValue("V_description") Else GetDescription = ioVPMRepReference.GetAttributeValue("V_description") End If If (GetDescription = "") Then GetDescription = "None" End If End Function Function GetComments(ioVPMReference As VPMReference, ioVPMRepReference As VPMRepReference) As String If IsEmpty(ioVPMRepReference) Then GetComments = ioVPMReference.GetAttributeValue("V_versionComment") Else GetComments = ioVPMRepReference.GetAttributeValue("V_versionComment") End If If (GetComments = "") Then GetComments = "None" End If End Function