Hi community,
This is another article about how to perform actions that you can do in the web portal but via code.
Today.... Add a business item in your production by code
Introduction
If you want to add a new business item (business service, business process or business operation), you usually do it from the production configuration.
![](/sites/default/files/inline/images/images/imagen(146).png)
![](/sites/default/files/inline/images/images/imagen(148).png)
By the same way, if you are not able to access to this portal, you can add your business item into your production by code.
## AddBusinessItem
/// Add a item into the production
/// <ul>
/// <li><var>pProduction</var> Name of the production.</li>
/// <li><var>pName</var> Set the name of the item. This value is mandatory.</li>
/// <li><var>pClassName</var> Set the classname of the item. This value is mandatory.</li>
/// <li><var>pCategory</var> Set the name of the category into the production.</li>
/// <li><var>pEnable</var> Set if the item is enabled.</li>
/// <li><var>pLogTraceEvents</var> Set event traces.</li>
/// <li><var>pPoolSize</var> Pool size.</li>
/// <li><var>pComment</var> Comment.</li>
/// </ul>
/// <example>Do myClass.AddItem("myPath.MyProduction", Item1", "myPath.MyClass", "Internal")</example>
ClassMethod AddBusinessItem(pProduction As %String, pName As %String, pClassName As %String, pCategory As %String = "", pEnabled As %Boolean = 1, pLogTraceEvents As %Boolean = 1, pPoolSize As %Integer = 1, pComment As %String = "") As %Status
{
Set ret = $$$OK
Try {
// Check the mandatories values
If ((pName '="") && (pClassName '=""))
{
If '##class(Ens.Config.Item).NameExists(pProduction,pName,.idItem)
{
Set produccion = ##class(Ens.Config.Production).%OpenId(pProduction)
Write !,"Installing "_pName
Set objItem = ##class(Ens.Config.Item).%New()
Set objItem.Name = pName
Set objItem.ClassName = pClassName
Set objItem.Enabled = pEnabled
Set objItem.LogTraceEvents = pLogTraceEvents
Set objItem.Category = pCategory
Set objItem.PoolSize = pPoolSize
Set objItem.Comment = pComment
Do produccion.Items.Insert(objItem)
Set st = produccion.%Save()
Kill objItem
Do ##class(Ens.Director).RestartProduction(0,1)
Write !,"Item "_pName_" installed."
}
Else
{
Write !,"Item "_pName_" already exists."
}
}
Else
{
If (pName = "") set attrib = "pName"
If (pClassName ="") set attrib = "pClassName"
$$$ThrowOnError($System.Status.Error(406,attrib))
}
}
Catch ex {
Set ret = ex.AsStatus()
Write !,"Error #",$System.Status.GetErrorCodes(ret),!
Write !,$System.Status.GetOneStatusText(ret,1),!
}
Quit ret
}
if you want to add a business service, your class should be inherited from Ens.BusinessService (as always)
## RemoveBusinessItem
/// Remove a business item from a production
/// <ul>
/// <li><var>pProduction</var> Name of the production.</li>
/// <li><var>pName</var> Name of the business item to remove. This value is mandatory.</li>
/// </ul>
/// <example>Do myClass.RemoveItem("Item1")</example>
ClassMethod RemoveBusinessItem(pProduction As %String, pName As %String) As %Status
{
Set ret = $$$OK
Try {
// Validate mandatory values
If (pName '="")
{
If ##class(Ens.Config.Item).NameExists(pProduction,pName,.idItem)
{
Set produccion = ##class(Ens.Config.Production).%OpenId(pProduction)
Write !,"Removing "_pName
Set objItem = produccion.FindItemByConfigName(pName)
Do produccion.RemoveItem(objItem)
Set st = produccion.%Save()
Kill objItem
Do ##class(Ens.Director).RestartProduction(0,1)
Write !,"Item "_pName_" removed"
}
Else
{
Write !,"Item "_pName_" not found."
}
}
Else
{
If (pName = "") set attrib = "pName"
$$$ThrowOnError($System.Status.Error(406,attrib))
}
}
Catch ex {
Set ret = ex.AsStatus()
Write !,"Error #",$System.Status.GetErrorCodes(ret),!
Write !,$System.Status.GetOneStatusText(ret,1),!
}
Quit ret
}
After a remove item, it restarts automatically the production to refresh the content.
If you add an item, you can configure its parameters using the default configuration, but it will be other post ;)
Best regards,
Kurro Lopez