A quick test of the method above worked fine.
1. make new expression
2. replace the old one
3. delete the old one
4. rename the new one
The raw journal output is below.
If this could be captured and applied to all loaded parts in the assembly with an expression named "WRK_PRT_NAME"
That would do it.
' NX 1847
' Journal created by dyoutz on Fri Jan 25 12:06:59 2019 Eastern Standard Time
'
Imports System
Imports NXOpen
Module NXJournal
Sub Main (ByVal args() As String)
Dim theSession As NXOpen.Session = NXOpen.Session.GetSession()
Dim workPart As NXOpen.Part = theSession.Parts.Work
Dim displayPart As NXOpen.Part = theSession.Parts.Display
' ----------------------------------------------
' Menu: Tools->Expressions...
' ----------------------------------------------
theSession.Preferences.Modeling.UpdatePending = False
Dim markId1 As NXOpen.Session.UndoMarkId = Nothing
markId1 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start")
theSession.SetUndoMarkName(markId1, "Expressions Dialog")
' can not output code to find <Model4.prt E>: <UGS::ExpKf::ExpGroup> &00007FF4E6BA3E08 [1636186]
Dim nullNXOpen_ExpressionGroup As NXOpen.ExpressionGroup = Nothing
workPart.ExpressionGroups.Active = nullNXOpen_ExpressionGroup
Dim markId2 As NXOpen.Session.UndoMarkId = Nothing
markId2 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Rename Exp")
Dim expression1 As NXOpen.Expression = CType(workPart.Expressions.FindObject("WRK_PRT_NAME"), NXOpen.Expression)
workPart.Expressions.Rename(expression1, "WRK_PRT_NAME_OLD")
theSession.DeleteUndoMark(markId2, Nothing)
Dim markId3 As NXOpen.Session.UndoMarkId = Nothing
markId3 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Create Expression")
Dim expression2 As NXOpen.Expression = Nothing
expression2 = workPart.Expressions.CreateExpression("String", "WRK_PRT_NAME=replaceString(ug_askcurrentworkpart(), "".prt"", """")")
Dim markId4 As NXOpen.Session.UndoMarkId = Nothing
markId4 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Check Circular")
Dim objects1(0) As NXOpen.NXObject
objects1(0) = expression2
theSession.UpdateManager.MakeUpToDate(objects1, markId4)
expression2.EditComment("")
Dim markId5 As NXOpen.Session.UndoMarkId = Nothing
markId5 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Update Expression")
Dim nErrs1 As Integer = Nothing
nErrs1 = theSession.UpdateManager.DoUpdate(markId5)
theSession.DeleteUndoMark(markId5, "Update Expression")
Dim markId6 As NXOpen.Session.UndoMarkId = Nothing
markId6 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Replace Expressions")
Dim markId7 As NXOpen.Session.UndoMarkId = Nothing
markId7 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Start")
Dim replaceExpressionsBuilder1 As NXOpen.ReplaceExpressionsBuilder = Nothing
replaceExpressionsBuilder1 = workPart.Expressions.CreateReplaceExpressionsBuilder()
theSession.SetUndoMarkName(markId7, "Replace Expressions Dialog")
' ----------------------------------------------
' Dialog Begin Replace Expressions
' ----------------------------------------------
replaceExpressionsBuilder1.CurrentString = "WRK_PRT_NAME_OLD"
replaceExpressionsBuilder1.ReplaceString = "WRK_PRT_NAME"
Dim markId8 As NXOpen.Session.UndoMarkId = Nothing
markId8 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Replace Expressions")
theSession.DeleteUndoMark(markId8, Nothing)
Dim markId9 As NXOpen.Session.UndoMarkId = Nothing
markId9 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Replace Expressions")
Dim nXObject1 As NXOpen.NXObject = Nothing
nXObject1 = replaceExpressionsBuilder1.Commit()
theSession.DeleteUndoMark(markId9, Nothing)
theSession.SetUndoMarkName(markId7, "Replace Expressions")
replaceExpressionsBuilder1.Destroy()
theSession.DeleteUndoMark(markId7, Nothing)
Dim markId10 As NXOpen.Session.UndoMarkId = Nothing
markId10 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions")
Dim markId11 As NXOpen.Session.UndoMarkId = Nothing
markId11 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Make Up to Date")
Dim markId12 As NXOpen.Session.UndoMarkId = Nothing
markId12 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Edit Expression")
Dim expression3 As NXOpen.Expression = CType(workPart.Expressions.FindObject("WRK_PRT_REV_03"), NXOpen.Expression)
workPart.Expressions.Edit(expression3, "replaceString(WRK_PRT_NAME, ""__"", ""/"")")
Dim markId13 As NXOpen.Session.UndoMarkId = Nothing
markId13 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Edit Expression")
Dim expression4 As NXOpen.Expression = CType(workPart.Expressions.FindObject("WRK_PRT_NO_02"), NXOpen.Expression)
workPart.Expressions.Edit(expression4, "if(Length(WRK_PRT_REV_02 )>1)(nth(1,WRK_PRT_REV_02))else(WRK_PRT_NAME)")
Dim objects2(1) As NXOpen.NXObject
objects2(0) = expression3
objects2(1) = expression4
theSession.UpdateManager.MakeUpToDate(objects2, markId11)
Dim markId14 As NXOpen.Session.UndoMarkId = Nothing
markId14 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "NX update")
Dim nErrs2 As Integer = Nothing
nErrs2 = theSession.UpdateManager.DoUpdate(markId14)
theSession.DeleteUndoMark(markId14, "NX update")
theSession.DeleteUndoMark(markId11, Nothing)
theSession.DeleteUndoMark(markId10, Nothing)
theSession.SetUndoMarkName(markId1, "Expressions")
theSession.DeleteUndoMark(markId6, Nothing)
Dim markId15 As NXOpen.Session.UndoMarkId = Nothing
markId15 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Visible, "Start")
theSession.SetUndoMarkName(markId15, "Expressions Dialog")
' ----------------------------------------------
' Dialog Begin Expressions
' ----------------------------------------------
Dim markId16 As NXOpen.Session.UndoMarkId = Nothing
markId16 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Delete Expression")
workPart.Expressions.Delete(expression1)
Dim markId17 As NXOpen.Session.UndoMarkId = Nothing
markId17 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "NX update")
Dim nErrs3 As Integer = Nothing
nErrs3 = theSession.UpdateManager.DoUpdate(markId17)
theSession.DeleteUndoMark(markId17, "NX update")
Dim markId18 As NXOpen.Session.UndoMarkId = Nothing
markId18 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions")
theSession.DeleteUndoMark(markId18, Nothing)
Dim markId19 As NXOpen.Session.UndoMarkId = Nothing
markId19 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Expressions")
Dim markId20 As NXOpen.Session.UndoMarkId = Nothing
markId20 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "Make Up to Date")
Dim markId21 As NXOpen.Session.UndoMarkId = Nothing
markId21 = theSession.SetUndoMark(NXOpen.Session.MarkVisibility.Invisible, "NX update")
Dim nErrs4 As Integer = Nothing
nErrs4 = theSession.UpdateManager.DoUpdate(markId21)
theSession.DeleteUndoMark(markId21, "NX update")
theSession.DeleteUndoMark(markId20, Nothing)
theSession.DeleteUndoMark(markId19, Nothing)
theSession.SetUndoMarkName(markId15, "Expressions")
' ----------------------------------------------
' Menu: Tools->Journal->Stop Recording
' ----------------------------------------------
End Sub
End Module
Dave
Automotive Tooling / Aircraft Tooling / Ground Support Structures
NX11, Win 10 Pro