Artículo
Kurro Lopez · Ago 9, 2021 Lectura de 4 min

Añadir una configuración por defecto por código

Hola comunidad,

Este es otro artículo sobre cómo realizar acciones que puede realizar en el portal web pero mediante código.

Hoy .... Agregar un valor de configuración por defecto por código

Introducción

Si quieres añadir un nuevo valor por defecto, normalmente lo haces a través de l configuración de producción.

Entonces tu configuración por defecto está asignado a tu objeto de negocio, in este ejemplo, a Test.BS.MyServiceClass

Si no puedes acceder a la configuración por defecto en el porta, este es tu método para añadir elementos.

Nota: Para este ehemplo, he creado una clase simple %CSP.REST para usarlo como servicio API y llama a la clase NumberTranslate class. Puedes descargártelo en Open Exchange.

AddDefaultSetting

/// Insert or update a default value
/// <ul>
/// <li><var>pItemName</var> Set the name of item. Optional.</li>
/// <li><var>pHostClass</var> Set the name of the Host Class. Optional.</li>
/// <li><var>pSettingName</var> Set the setting name. Mandatory.</li>
/// <li><var>pSettingValue</var> Set the default value. Optional.</li>
/// <li><var>pProduction</var> Set the name of the productio, if is empty, this values will apply to all productions (*). Optional.</li>
/// </ul>
/// <example>
/// /// Add new default setting for the current production
/// Do myClass.AddDefaultSetting("Host.RS.Rest",,"Port","21","Test.MyProduction")
/// // Will be: Test.MyProduction||Host.RS.Rest||*||Port --> 21
/// /// Add new default setting for all productions.
/// Do myClass.AddDefaultSetting("Host.RS.Rest",,"Port","21")
/// // Will be: *||Host.RS.Rest||*||Port --> 21
/// </example>
ClassMethod AddDefaultSetting(pItemName As %String = "*", pHostClass As %String = "*", pSettingName As %String, pSettingValue As %String, pProduction As %String = "*") As %Status
{
    Set ret = $$$OK

    Try {

        // Validate mandatories parameters
        If (pSettingName '="")
        {
            Set template = "%1||%2||%3||%4"
            Set configId = ##class(%Library.MessageDictionary).FormatText(template,pProduction, pItemName, pHostClass, pSettingName)
            If '##class(Ens.Config.DefaultSettings).%ExistsId(configId)
            {
                Set conf = ##class(Ens.Config.DefaultSettings).%New()
                Write !,"Create new config "_configId
            }
            Else
            {
                Set conf = ##class(Ens.Config.DefaultSettings).%OpenId(configId)
                Write !,"Update config "_configId
            }

            Set conf.ProductionName = production
            Set conf.ItemName = pItemName
            Set conf.HostClassName = pHostClass
            Set conf.SettingName = pSettingName
            Set conf.SettingValue = pSettingValue
            Set conf.Deployable = 1

            Do conf.%Save()
            Kill conf
        }
        Else
        {
            If (pSettingName = "") set attrib = "pSettingName"

            $$$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
}

En este ejemplo, he usado la siguiente llamada:

Do myClass.AddDefaultSetting("Test.BS.MyServiceClass",,"lang","es","Test.MyProduction")

Ahora, usando la misma llamada, actualizo el idioma para ponerlo a "en" (Inglés)

Do myClass.AddDefaultSetting("Test.BS.MyServiceClass",,"lang","en","Test.MyProduction")

 

Si quiero eliminar el parámetro por defecto, este es el método.

RemoveDefaultSetting

/// Remove a default setting
/// <ul>
/// <li><var>pItemName</var> Set the name of item. Optional.</li>
/// <li><var>pHostClass</var> Set the name of the Host Class. Optional.</li>
/// <li><var>pSettingName</var> Set the setting name. Mandatory.</li>
/// <li><var>pProduction</var> Set the name of the productio, if is empty, this values will apply to all productions (*). Optional.</li>
/// </ul>
/// <example>Do myClass.RemoveDefaultSetting("Host.RS.Rest",,"Port")</example>
ClassMethod RemoveDefaultSetting(pItemName As %String = "*", pHostClass As %String = "*", pSettingName As %String, pProduction As %String = "*") As %Status
{
    Set ret = $$$OK

    Try {

        // Validate mandatories parameters
        If (pSettingName '="")
        {
            Set template = "%1||%2||%3||%4"

            Set configId = ##class(%Library.MessageDictionary).FormatText(template,pProduction, pItemName, pHostClass, pSettingName)

            If ##class(Ens.Config.DefaultSettings).%ExistsId(configId)
            {
                Do ##class(Ens.Config.DefaultSettings).%DeleteId(configId)
            }
            Else
            {
                Write !,"Configure parameter not found ["_configId_"]"
            }
        }
        Else
        {
            If (pSettingName = "") set attrib = "pSettingName"

            $$$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
}

Espero que estos métodos te sean útiles.

Saludos y happy coding
Kurro Lopez

 

1
0 23
Debate (0)1
Inicie sesión o regístrese para continuar