@@ -266,8 +266,11 @@ ClassMethod ParseExternalName(externalName, Output internalName)
266
266
}
267
267
}
268
268
269
- /// Given an internal name for a PTD item, returns a suggested filename for export.
270
- ClassMethod ParseInternalName (internalName , noFolders As %Boolean = 0 , Output fileName )
269
+ /// Given an internal name for a PTD item, returns a suggested filename for export, as well as:
270
+ /// - itemName: name of the configuration item
271
+ /// - productionName: name of the associated production
272
+ /// - isProdSettings: if true, this item is a production settings; if false, this item is a configuration item settings
273
+ ClassMethod ParseInternalName (internalName , noFolders As %Boolean = 0 , Output fileName , Output itemName , Output productionName , Output isProdSettings As %Boolean )
271
274
{
272
275
set name = $piece (internalName ," ." ,1 ,*-1 )
273
276
if 'noFolders {
@@ -276,9 +279,10 @@ ClassMethod ParseInternalName(internalName, noFolders As %Boolean = 0, Output fi
276
279
}
277
280
// Abbreviate "ProductionSettings" to "ProdStgs", "Settings" to "Stgs".
278
281
Set prefix = $Case ($Extract (name ), " P" :" ProdStgs-" , " S" :" Stgs-" , :" " )
279
- Set name = prefix _$Piece (name ," -" ,2 ,*)
282
+ set isProdSettings = ($Extract (name ) = " P" )
283
+ Set name = $Piece (name ," -" ,2 ,*)
280
284
set $ListBuild (itemName , itemClassName ) = $ListFromString (name , " |" )
281
- set name = $select (
285
+ set name = prefix _ $select (
282
286
$get (itemClassName ) '= " " : itemName _$zhex ($zcrc (itemClassName ,6 )),
283
287
1 : name
284
288
)
@@ -288,4 +292,28 @@ ClassMethod ParseInternalName(internalName, noFolders As %Boolean = 0, Output fi
288
292
set fileName = $translate ($replace (name , " ." , " _" ) _ " .xml" , " \" , " /" )
289
293
}
290
294
295
+ /// Given an internal name for a PTD item, removes that item from the production.
296
+ ClassMethod RemoveItem (internalName , noFolders As %Boolean = 0 ) As %Status
297
+ {
298
+ set sc = $$$OK
299
+ try {
300
+ if '##class (%Library.EnsembleMgr ).IsEnsembleNamespace () {
301
+ quit
302
+ }
303
+ do ..ParseInternalName (internalName , noFolders , , .itemName , .productionName , .isProdSettings )
304
+ if 'isProdSettings {
305
+ set production = ##class (Ens.Config.Production ).%OpenId (productionName ,,.sc )
306
+ quit :$$$ISERR(sc )
307
+ set configItem = production .OpenItemByConfigName (itemName ,.sc )
308
+ quit :$$$ISERR(sc )
309
+ do production .RemoveItem (configItem )
310
+ set sc = production .%Save ()
311
+ quit :$$$ISERR(sc )
312
+ }
313
+ } catch err {
314
+ set sc = err .AsStatus ()
315
+ }
316
+ return sc
317
+ }
318
+
291
319
}
0 commit comments