Hi Stan,
I think this is the correct code for your solution.
Main Rule:
Dim oAsmDoc As AssemblyDocument = ThisApplication.ActiveDocument
Dim oRefDocs As DocumentsEnumerator = oAsmDoc.AllReferencedDocuments
' the following two lines are necessary to pass arguments to the external rule
Dim map As Inventor.NameValueMap = ThisApplication.TransientObjects.CreateNameValueMap()
map.Add("aPath", ThisDoc.Path)
'map.Add("aFullFileName", "")
Dim oRefDoc As Document
For Each oRefDoc In oRefDocs
'map.Value("aFullFileName") = oRefDoc.FullFileName ' I've used this line for my tests, but is a useful information for your code
'ThisDoc.Launch(oRefDoc.FullFileName) ' If you want open the referenced filename, I've used this line for my tests
iLogicVb.RunExternalRule("Overige - open drawing", map) ' your external rule receive the aPath argument
iLogicVb.RunExternalRule("Export - PDF in assembly", map) ' your external rule receive the aPath argument
oRefDoc.Close(True) ' this close the referenced document
Next
External Rule to Open the referenced document (I think is a better solution if you integrate this code in the main rule):
'aPath = ThisDoc.Path
ParNum = iProperties.Value("Project", "Part Number")
aName = RuleArguments("aPath") & "\" & ParNum & ".idw" ' this line read the given argument
ThisDoc.Launch(aName)
External Rule to export PDF:
(Please read and check carefully this rule before you run it)
Sub Main()
' this information can be easily passed as an argument
' in some cases this code give you wrong information, for example when you call it from an assembly
' this is the right code:
' Dim oDoc As inventor._Document=ThisApplication.documents.itembyname(RuleArguments("aFullFileName"))
oDoc = ThisDoc.Document
aModel = IO.Path.GetFileName(ThisDoc.ModelDocument.FullFileName) ' RuleArguments("aFullFileName")
If Not oDoc.DocumentType = Inventor.DocumentTypeEnum.kDrawingDocumentObject Then
MessageBox.Show("This is not a drawing. Please open a drawing to create a PDF-file.", "iLogic", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1)
Exit Sub
Else If iProperties.Value(aModel, "Project", "Part Number") = "" Then
question = MessageBox.Show("The part number is not filled out in the iProperties, do you want to enter a part number?", "iLogic", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1)
If question = vbNo Then
Exit Sub
ElseIf question = vbYes Then
iProperties.Value(aModel, "Project", "Part Number") = InputBox("Enter a part number.", "iLogic", "")
End If
Else
InventorVb.DocumentUpdate()
ThisDoc.Save ' oDoc.Save
Update
Create
Move
Export
Message
End If
End Sub
Public Sub Update
' this information can be easily passed as an argument
' in some cases this code give you wrong information, for example when you call it from an assembly
aModel = IO.Path.GetFileName(ThisDoc.ModelDocument.FullFileName) ' RuleArguments("aFullFileName")
iProperties.Value("Summary", "Title") = iProperties.Value(aModel, "Summary", "Title")
iProperties.Value("Summary", "Subject") = iProperties.Value(aModel, "Summary", "Subject")
iProperties.Value("Project", "Part Number") = iProperties.Value(aModel, "Project", "Part Number")
iProperties.Value("Project", "Revision Number") = iProperties.Value(aModel, "Project", "Revision Number")
End Sub
Public Sub Create
'aPath = ThisDoc.Path
aPath = RuleArguments("aPath") ' **** my correction
aFolder = aPath & "\" & "DXF"
bFolder = aPath & "\" & "Oud"
If Not System.IO.Directory.Exists(aFolder) Then
System.IO.Directory.CreateDirectory(aFolder)
End If
If Not System.IO.Directory.Exists(bFolder) Then
System.IO.Directory.CreateDirectory(bFolder)
End If
End Sub
Public Sub Move
'aPath = ThisDoc.Path
aPath = RuleArguments("aPath") ' **** my correction
iPropParNum = iProperties.Value("Project", "Part Number")
' *** my suggestion
pDXF = aPath & "\" & "DXF" & "\"& iPropParNum
pOUD = aPath & "\" & "Oud" & "\"& iPropParNum
noneFileToMove = pDXF & ".pdf" ' you don't need to assign this text to a variable
noneLocation = pOUD & ".pdf" ' used it as subroutine argument
none2FileToMove = pDXF & " rev.pdf"
none2Location = pOUD & " rev.pdf"
aFileToMove = pDXF & " revA.pdf"
aLocation = pOUD & " revA.pdf"
bFileToMove = pDXF & " revB.pdf"
bLocation = pOUD & " revB.pdf"
cFileToMove = pDXF & " revC.pdf"
cLocation = pOUD & " revC.pdf"
dFileToMove = pDXF & " revD.pdf"
dLocation = pOUD & " revD.pdf"
eFileToMove = pDXF & " revE.pdf"
eLocation = pOUD & " revE.pdf"
fFileToMove = pDXF & " revF.pdf"
fLocation = pOUD & " revF.pdf"
gFileToMove = pDXF & " revG.pdf"
gLocation = pOUD & " revG.pdf"
hFileToMove = pDXF & " revH.pdf"
hLocation = pOUD & " revH.pdf"
iFileToMove = pDXF & " revI.pdf"
iLocation = pOUD & " revI.pdf"
jFileToMove = pDXF & " revJ.pdf"
jLocation = pOUD & " revJ.pdf"
kFileToMove = pDXF & " revK.pdf"
kLocation = pOUD & " revK.pdf"
lFileToMove = pDXF & " revL.pdf"
lLocation = pOUD & " revL.pdf"
mFileToMove = pDXF & " revM.pdf"
mLocation = pOUD & " revM.pdf"
nFileToMove = pDXF & " revN.pdf"
nLocation = pOUD & " revN.pdf"
oFileToMove = pDXF & " revO.pdf"
oLocation = pOUD & " revO.pdf"
pFileToMove = pDXF & " revP.pdf"
pLocation = pOUD & " revP.pdf"
qFileToMove = pDXF & " revQ.pdf"
qLocation = pOUD & " revQ.pdf"
rFileToMove = pDXF & " revR.pdf"
rLocation = pOUD & " revR.pdf"
sFileToMove = pDXF & " revS.pdf"
sLocation = pOUD & " revS.pdf"
tFileToMove = pDXF & " revT.pdf"
tLocation = pOUD & " revT.pdf"
uFileToMove = pDXF & " revU.pdf"
uLocation = pOUD & " revU.pdf"
vFileToMove = pDXF & " revV.pdf"
vLocation = pOUD & " revV.pdf"
wFileToMove = pDXF & " revW.pdf"
wLocation = pOUD & " revW.pdf"
xFileToMove = pDXF & " revX.pdf"
xLocation = pOUD & " revX.pdf"
yFileToMove = pDXF & " revY.pdf"
yLocation = pOUD & " revY.pdf"
zFileToMove = pDXF & " revZ.pdf"
zLocation = pOUD & " revZ.pdf"
auFileToMove = pDXF & "_revA.pdf"
auLocation = pOUD & "_revA.pdf"
buFileToMove = pDXF & "_revB.pdf"
buLocation = pOUD & "_revB.pdf"
cuFileToMove = pDXF & "_revC.pdf"
cuLocation = pOUD & "_revC.pdf"
duFileToMove = pDXF & "_revD.pdf"
duLocation = pOUD & "_revD.pdf"
euFileToMove = pDXF & "_revE.pdf"
euLocation = pOUD & "_revE.pdf"
fuFileToMove = pDXF & "_revF.pdf"
fuLocation = pOUD & "_revF.pdf"
guFileToMove = pDXF & "_revG.pdf"
guLocation = pOUD & "_revG.pdf"
huFileToMove = pDXF & "_revH.pdf"
huLocation = pOUD & "_revH.pdf"
iuFileToMove = pDXF & "_revI.pdf"
iuLocation = pOUD & "_revI.pdf"
juFileToMove = pDXF & "_revJ.pdf"
juLocation = pOUD & "_revJ.pdf"
kuFileToMove = pDXF & "_revK.pdf"
kuLocation = pOUD & "_revK.pdf"
luFileToMove = pDXF & "_revL.pdf"
luLocation = pOUD & "_revL.pdf"
muFileToMove = pDXF & "_revM.pdf"
muLocation = pOUD & "_revM.pdf"
nuFileToMove = pDXF & "_revN.pdf"
nuLocation = pOUD & "_revN.pdf"
ouFileToMove = pDXF & "_revO.pdf"
ouLocation = pOUD & "_revO.pdf"
puFileToMove = pDXF & "_revP.pdf"
puLocation = pOUD & "_revP.pdf"
quFileToMove = pDXF & "_revQ.pdf"
quLocation = pOUD & "_revQ.pdf"
ruFileToMove = pDXF & "_revR.pdf"
ruLocation = pOUD & "_revR.pdf"
suFileToMove = pDXF & "_revS.pdf"
suLocation = pOUD & "_revS.pdf"
tuFileToMove = pDXF & "_revT.pdf"
tuLocation = pOUD & "_revT.pdf"
uuFileToMove = pDXF & "_revU.pdf"
uuLocation = pOUD & "_revU.pdf"
vuFileToMove = pDXF & "_revV.pdf"
vuLocation = pOUD & "_revV.pdf"
wuFileToMove = pDXF & "_revW.pdf"
wuLocation = pOUD & "_revW.pdf"
xuFileToMove = pDXF & "_revX.pdf"
xuLocation = pOUD & "_revX.pdf"
yuFileToMove = pDXF & "_revY.pdf"
yuLocation = pOUD & "_revY.pdf"
zuFileToMove = pDXF & "_revZ.pdf"
zuLocation = pOUD & "_revZ.pdf"
' you don' need to assign a variable for each line
' Check_Del_Move_File( pDXF & ".pdf", pOUD & ".pdf")
Check_Del_Move_File( noneFileToMove, noneLocation )
Check_Del_Move_File( none2FileToMove, none2Location )
Check_Del_Move_File( aFileToMove, aLocation )
Check_Del_Move_File( bFileToMove, bLocation )
Check_Del_Move_File( cFileToMove, cLocation )
Check_Del_Move_File( dFileToMove, dLocation )
Check_Del_Move_File( eFileToMove, eLocation )
Check_Del_Move_File( fFileToMove, fLocation )
Check_Del_Move_File( gFileToMove, gLocation )
Check_Del_Move_File( hFileToMove, hLocation )
Check_Del_Move_File( iFileToMove, iLocation )
Check_Del_Move_File( jFileToMove, jLocation )
Check_Del_Move_File( kFileToMove, kLocation )
Check_Del_Move_File( lFileToMove, lLocation )
Check_Del_Move_File( mFileToMove, mLocation )
Check_Del_Move_File( nFileToMove, nLocation )
Check_Del_Move_File( oFileToMove, oLocation )
Check_Del_Move_File( pFileToMove, pLocation )
Check_Del_Move_File( qFileToMove, qLocation )
Check_Del_Move_File( rFileToMove, rLocation )
Check_Del_Move_File( sFileToMove, sLocation )
Check_Del_Move_File( tFileToMove, tLocation )
Check_Del_Move_File( uFileToMove, uLocation )
Check_Del_Move_File( vFileToMove, vLocation )
Check_Del_Move_File( wFileToMove, wLocation )
Check_Del_Move_File( xFileToMove, xLocation )
Check_Del_Move_File( yFileToMove, yLocation )
Check_Del_Move_File( zFileToMove, zLocation )
Check_Del_Move_File( auFileToMove, auLocation )
Check_Del_Move_File( buFileToMove, buLocation )
Check_Del_Move_File( cuFileToMove, cuLocation )
Check_Del_Move_File( duFileToMove, duLocation )
Check_Del_Move_File( euFileToMove, euLocation )
Check_Del_Move_File( fuFileToMove, fuLocation )
Check_Del_Move_File( guFileToMove, guLocation )
Check_Del_Move_File( huFileToMove, huLocation )
Check_Del_Move_File( iuFileToMove, iuLocation )
Check_Del_Move_File( juFileToMove, juLocation )
Check_Del_Move_File( kuFileToMove, kuLocation )
Check_Del_Move_File( luFileToMove, luLocation )
Check_Del_Move_File( muFileToMove, muLocation )
Check_Del_Move_File( nuFileToMove, nuLocation )
Check_Del_Move_File( ouFileToMove, ouLocation )
Check_Del_Move_File( puFileToMove, puLocation )
Check_Del_Move_File( quFileToMove, quLocation )
Check_Del_Move_File( ruFileToMove, ruLocation )
Check_Del_Move_File( suFileToMove, suLocation )
Check_Del_Move_File( tuFileToMove, tuLocation )
Check_Del_Move_File( uuFileToMove, uuLocation )
Check_Del_Move_File( vuFileToMove, vuLocation )
Check_Del_Move_File( wuFileToMove, wuLocation )
Check_Del_Move_File( xuFileToMove, xuLocation )
Check_Del_Move_File( yuFileToMove, yuLocation )
Check_Del_Move_File( zuFileToMove, zuLocation )
' *** end of suggestion
End Sub
Public Sub Export()
'aPath = ThisDoc.Path
aPath = RuleArguments("aPath") ' *** my correction
iPropParNum = iProperties.Value("Project", "Part Number")
iPropRevNum = iProperties.Value("Project", "Revision Number")
aPDF = ThisApplication.ApplicationAddIns.ItemById _
("{0AC6FD96-2F4D-42CE-8BE0-8AEA580399E4}")
aDocument = ThisApplication.ActiveDocument
aContext = ThisApplication.TransientObjects.CreateTranslationContext
aContext.Type = IOMechanismEnum.kFileBrowseIOMechanism
aPDFOptions = ThisApplication.TransientObjects.CreateNameValueMap
aDataMedium = ThisApplication.TransientObjects.CreateDataMedium
aFolder = aPath & "\" & "DXF"
bFolder = aPath & "\" & "oud"
aDataMedium.FileName = aFolder & "\" & iPropParNum & " rev" & iPropRevNum & ".pdf"
aName = aDataMedium.FileName ' *** this variable is not used ***
If aPDF.HasSaveCopyAsOptions(aDataMedium, aContext, aPDFOptions) Then
aPDFOptions.Value("All_Color_AS_Black") = 1
aPDFOptions.Value("Remove_Line_Weights") = 1
aPDFOptions.Value("Vector_Resolution") = 4800
aPDFOptions.Value("Sheet_Range") = Inventor.PrintRangeEnum.kPrintAllSheets
End If
aPDF.SaveCopyAs(aDocument, aContext, aPDFOptions, aDataMedium)
' *** the follow code has been adapted on my suggested subroutines
Check_Del_File(aFolder & "\" & iPropRevNum & ".pdf", aFolder & "\" & iPropRevNum & ".pdf")
Check_Del_File(aFolder & "\" & " rev" & iPropRevNum & ".pdf", aFolder & "\" & " rev" & iPropRevNum & ".pdf")
Check_Del_File(aFolder & "\" & " rev" & ".pdf", aFolder & "\" & " rev" & ".pdf")
Check_Move_File(aFolder & "\" & iPropParNum & " rev" & ".pdf", _
aFolder & "\" & iPropParNum & " rev" & ".pdf", aFolder & "\" & iPropParNum & ".pdf")
Check_Move_File(aFolder & "\" & iPropParNum & " rev-" & ".pdf", _
aFolder & "\" & iPropParNum & " rev-" & ".pdf", aFolder & "\" & iPropParNum & ".pdf" )
Check_Del_File(aFolder & "\" & iPropParNum & ".pdf", bFolder & "\" & iPropParNum & ".pdf" )
Check_Del_File(aFolder & "\" & iPropParNum & " rev" & iPropRevNum & ".pdf", _
bFolder & "\" & iPropParNum & " rev" & iPropRevNum & ".pdf" )
End Sub
Sub Check_Del_File(oExist As String, oDelete As String) ' my suggestion
' Try
If System.IO.File.Exists(oExist) = True Then
System.IO.File.Delete(oDelete)
End If
' is a good practice to add an error control code
' Catch e As Exception
' MsgBox("The process failed: {0}", e.ToString())
' End Try
End Sub
Sub Check_Move_File(oFileToMove As String, oLocation As String) ' my suggestion
' Try
If System.IO.File.Exists(oFileToMove) = True Then
System.IO.File.Move(oFileToMove, oLocation)
End If
' is a good practice to add an error control code
' Catch e As Exception
' MsgBox("The process failed: {0}", e.ToString())
' End Try
End Sub
Sub Check_Del_Move_File(oFileToMove As String, oLocation As String) ' my suggestion
' Try
If System.IO.File.Exists(oFileToMove) = True Then
System.IO.File.Delete(oLocation)
System.IO.File.Move(oFileToMove, oLocation)
End If
' is a good practice to add an error control code
' Catch e As Exception
' MsgBox("The process failed: {0}", e.ToString())
' End Try
End Sub
Public Sub Message()
'aPath = ThisDoc.Path
'aFolder = aPath & "\" & "DXF"
aFolder = RuleArguments("aPath") & "\" & "DXF" ' *** my correction
iPropParNum = iProperties.Value("Project", "Part Number")
iPropRevNum = iProperties.Value("Project", "Revision Number")
aDataMedium = ThisApplication.TransientObjects.CreateDataMedium
aDataMedium.FileName = aFolder & "\" & iPropParNum & " rev" & iPropRevNum & ".pdf"
aName = aDataMedium.FileName ' I don't think you need this line
' *** this condition don't do nothing, may be contain an error***
If iPropRevNum = "" Then
aName = aFolder & "\" & iPropParNum & ".pdf"
Else If iPropRevNum = "-" Then
aName = aFolder & "\" & iPropParNum & ".pdf"
End If
' ***
If Not aName = aFolder & "\" & ".pdf" Then
question = MessageBox.Show("Het bestand is opgeslagen in " & aName _
& vbNewLine _
& vbNewLine & "Bestand openen?" , "Opgeslagen",MessageBoxButtons.YesNo,MessageBoxIcon.Question)
If question = vbYes Then
ThisDoc.Launch(aName)
End If
End If
End Sub
Please let me know if my corrections and my suggestions are helpful for you.
Bregs
Rossano Praderi
--------------------------------------
If my post answers your question, please click the "Accept as Solution"
button. This helps everyone find answers more quickly!
---------------