@@ -62,7 +62,7 @@ ClassMethod DeleteProductionDefinitionShards(productionClass As %String, deleteM
6262 while rs .%Next (.sc ) {
6363 quit :$$$ISERR(sc )
6464 set ptdFilename = rs .Data (" Name" )
65- set sc = ##class ( %Studio.SourceControl.Production ) .ParseExternalName (ptdFilename , .ptdInternalName )
65+ set sc = . .ParseExternalName (ptdFilename , .ptdInternalName )
6666 quit :$$$ISERR(sc )
6767 // TODO: Consider reverting delete if any ptd is not editable by current user
6868 set sc = $method (%SourceControl , deleteMethod , ptdInternalName )
@@ -371,26 +371,32 @@ ClassMethod IsProductionClass(className As %String, nameMethod As %String) As %B
371371ClassMethod ParseExternalName (externalName , Output internalName = " " , Output productionName = " " ) As %Status
372372{
373373 set sc = $$$OK
374- set extNameNormalized = $replace (externalName , " \" , " /" )
375- set file = $piece (extNameNormalized , " /" , *)
376- if $extract (file ,1 ,9 ) = " ProdStgs-" {
377- set productionName = $replace ($extract (file ,10 ,*-4 ), " _" , " ." )
378- set internalName = ..CreateInternalName (productionName ,,,1 )
379- } else {
380- if ##class (%File ).Exists (externalName ) {
381- // Special case for Config Item Settings PTD, requires checking PTD CDATA for Item and Class name
382- set deployDoc = ##class (EnsLib.EDI.XML.Document ).%New (externalName )
383- set exportNotesPTDText = $ZCVT (deployDoc .GetValueAt (" /Export/Document[1]/1" )," I" ," XML" )
384- set exportNotesPTD = ##class (EnsLib.EDI.XML.Document ).%New (exportNotesPTDText )
385- set productionName = exportNotesPTD .GetValueAt (" /Deployment/Creation/SourceProduction" )
386- set settingsPTDText = $zconvert (deployDoc .GetValueAt (" /Export/Document[2]/1" )," I" ," XML" )
387- set settingsPTD = ##class (EnsLib.EDI.XML.Document ).%New (settingsPTDText )
388- set itemClass = settingsPTD .GetValueAt (" /Item/@ClassName" )
389- set itemName = settingsPTD .GetValueAt (" /Item/@Name" )
390- set internalName = ..CreateInternalName (productionName , itemName , itemClass , 0 )
391- } else {
392- set sc = $$$ERROR($$$GeneralError, " Item settings PTD file " _ externalName _ " does not exist. Cannot parse external name." )
393- }
374+ try {
375+ set extNameNormalized = $replace (externalName , " \" , " /" )
376+ set file = $piece (extNameNormalized , " /" , *)
377+ if $extract (file ,1 ,9 ) = " ProdStgs-" {
378+ set productionName = $replace ($extract (file ,10 ,*-4 ), " _" , " ." )
379+ set internalName = ..CreateInternalName (productionName ,,,1 )
380+ } else {
381+ if ##class (%File ).Exists (externalName ) {
382+ // Special case for Config Item Settings PTD, requires checking PTD CDATA for Item and Class name
383+ set deployDoc = ##class (EnsLib.EDI.XML.Document ).%New (externalName )
384+ set exportNotesPTDText = $ZCVT (deployDoc .GetValueAt (" /Export/Document[1]/1" )," I" ," XML" )
385+ set exportNotesPTD = ##class (EnsLib.EDI.XML.Document ).%New (exportNotesPTDText )
386+ set productionName = exportNotesPTD .GetValueAt (" /Deployment/Creation/SourceProduction" )
387+ set settingsPTDText = $zconvert (deployDoc .GetValueAt (" /Export/Document[2]/1" )," I" ," XML" )
388+ // unquote embedded CDATA close markers - see Ens.Util.ProjectTextDocument StreamToGbl method
389+ set settingsPTDText = $replace (settingsPTDText ," ]*]>" , " ]]>" )
390+ set settingsPTD = ##class (EnsLib.EDI.XML.Document ).%New (settingsPTDText )
391+ set itemClass = settingsPTD .GetValueAt (" /Item/@ClassName" )
392+ set itemName = settingsPTD .GetValueAt (" /Item/@Name" )
393+ set internalName = ..CreateInternalName (productionName , itemName , itemClass , 0 )
394+ } else {
395+ set sc = $$$ERROR($$$GeneralError, " Item settings PTD file " _ externalName _ " does not exist. Cannot parse external name." )
396+ }
397+ }
398+ } catch err {
399+ set sc = err .AsStatus ()
394400 }
395401 return sc
396402}
0 commit comments