Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

  • Congratulations waross on being selected by the Eng-Tips community for having the most helpful posts in the forums last week. Way to Go!

Trying to access the clipboard when recording a journal

Status
Not open for further replies.

E_Beccles

Automotive
Nov 16, 2016
15
GB
I have a separate bit of software that generates an empty part file, and also copies the part name to the clipboard.

Because the empty part has 'TBC' as it's name in the part attributes table I wish to record a journal that updates this attribute to whatever is saved in the clipboard at the click of a button.

Whenever I try and record the journal it records the end result rather than the actions. I've tried replacing the string in the journal code to Clipboard.GetText() but NX says it doesn't have access to the clipboard. I don't know anything about VBA and I'm kinda just hacking at it. Does anyone here have some pointers?
 
Replies continue below

Recommended for you

Code:
Option Strict Off
Imports System
Imports System.Collections.Generic
Imports NXOpen

Module Module86

    Sub Main()

        Dim theSession As Session = Session.GetSession()
        If IsNothing(theSession.Parts.BaseWork) Then
            'active part required
            Return
        End If

        Dim workPart As Part = theSession.Parts.Work
        Dim lw As ListingWindow = theSession.ListingWindow
        lw.Open()


        If My.Computer.Clipboard.ContainsText Then
            lw.WriteLine(My.Computer.Clipboard.GetText)
        Else
            lw.WriteLine("** clipboard does not contain text **")
        End If

        lw.Close()

    End Sub

    Public Function GetUnloadOption(ByVal dummy As String) As Integer

        'Unloads the image immediately after execution within NX
        GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately

    End Function

End Module

The code above works for me (NX 9, Win 7). It displays the text on the clipboard (if any) in the NX information window. If you get an error when running the code, can you post the error text or a screenshot of the error?

www.nxjournaling.com
 
Thank you very much for your reply.

The code you posted works well but I am struggling to apply it to edit the name attribute.
 
Below is one potential solution.

Code:
Option Strict Off
Imports System
Imports NXOpen

Module Module8

    Dim theSession As Session = Session.GetSession()

    Sub Main()

        If IsNothing(theSession.Parts.BaseWork) Then
            'active part required
            Return
        End If

        Dim workPart As Part = theSession.Parts.Work
        Dim lw As ListingWindow = theSession.ListingWindow
        lw.Open()

        Const attributeName As String = "TEST"
        Dim attributeInfo As NXObject.AttributeInformation

        Dim testVal As String

        If workPart.HasUserAttribute(attributeName, NXObject.AttributeType.String, -1) Then

            EditPartStringAttribute(attributeName, My.Computer.Clipboard.GetText)

        Else
            lw.WriteLine("the work part does not have a number attribute named: " & attributeName)
        End If


        lw.Close()

    End Sub

    Sub EditPartStringAttribute(ByVal attName As String, ByVal attValue As String)

        Dim markId1 As Session.UndoMarkId
        markId1 = theSession.SetUndoMark(Session.MarkVisibility.Visible, "update name attribute")

        Dim workPart As Part = theSession.Parts.Work
        Dim objects1(0) As NXObject
        objects1(0) = workPart

        Dim attributePropertiesBuilder1 As AttributePropertiesBuilder
        attributePropertiesBuilder1 = theSession.AttributeManager.CreateAttributePropertiesBuilder(workPart, objects1, AttributePropertiesBuilder.OperationType.None)

        attributePropertiesBuilder1.DataType = AttributePropertiesBaseBuilder.DataTypeOptions.String

        attributePropertiesBuilder1.Title = attName

        attributePropertiesBuilder1.IsArray = False

        attributePropertiesBuilder1.StringValue = attValue

        Dim nXObject1 As NXObject
        nXObject1 = attributePropertiesBuilder1.Commit()

        Dim nErrs1 As Integer
        nErrs1 = theSession.UpdateManager.DoUpdate(markId1)

        attributePropertiesBuilder1.Destroy()


    End Sub

    Public Function GetUnloadOption(ByVal dummy As String) As Integer

        'Unloads the image immediately after execution within NX
        GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately

    End Function

End Module

www.nxjournaling.com
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top