Hola comunidad,
Esto es otro artículo de como realizar acciones que puedes hacer desde el porta de gestión pero via código.
Hoy.... Añadir un business item en tu producción por código.
Introducción
Si quieres añadir un nuevo business item (business service, business process o business operation), sueles hacerlo desde la configuración de la producción.
De la misma forma, si no tienes acceso al este portal, puedes añadir tus business item en la producción por código.
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
}
Si quieres añadir un business service, tu clase debe de heredar desde Ens.BusinessService (como siempre)
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
}
Después de eliminar el item, reiniciará automáticamente la producción para refrescar el contenido.
Si añades un item, puedes configurar sus parámetros usando la configuración por defecto, pero eso será otro artículo ;)
Saludos cordiales,
Kurro Lopez