Skip to main content

Config.MapGlobals

Class Config.MapGlobals Extends (%Persistent, Config.CommonMapMethods, Config.CommonMapProperties, %SYSTEM.Help) [ Final, Inheritance = right, System = 4 ]

This class allows you to modify and view global mappings in the [Map.xxx] section of the CPF file through programatic APIs. While properties are usually modified through the System Management portal, there may be some occasion where modifying them through the API's is best for your system. In all the Config methods, if you do not specify the CPFFile parameter, the currently active CPF file is used. If you wish to modify a CPF file which is not the currently active one, then specify the CPFFile you wish to modify in the method call.
The Flags parameter does not normally need to be specified; the defaults are usually sufficient for most cases.
You can use either the provided API's (Create/Get/Modify/Delete) to modify the properties by passing in the correct parameters, or use Object syntax to open and directly manipulate the config objects (Open() and Exists()). Most objects created here need only to specify the Name of the object, and 1 or 2 properties since the the defaults are what are commonly used for most cases.

EXAMPLE:

; Use class methods to create a global mapping in namespace USER to the SAMPLES database %SYS>s Namespace="USER" %SYS>s Name="ABC" %SYS>s Properties("Database")="SAMPLES" %SYS>s Status=##Class(Config.MapGlobals).Create(Namespace,Name,.Properties) %SYS>i 'Status w !,"Error="$SYSTEM.Status.GetErrorText(Status) ; Now add a SLM mapping for a global XYZ(100). Note that two mappings will actually ; get created, a mapping of XYZ to namespace USER, and XYZ(100) to SAMPLES. We need this ; because the main mapping of XYZ will contain the collation of the entire global ; (which is 5 by default, Standard collation) %SYS>s Namespace="USER" %SYS>s Name="XYZ(100)" %SYS>s Properties("Database")="SAMPLES" %SYS>s Status=##Class(Config.MapGlobals).Create(Namespace,Name,.Properties) %SYS>i 'Status w !,"Error="$SYSTEM.Status.GetErrorText(Status) ; Use class methods to modify properties %SYS>s Status=##Class(Config.MapGlobals).Get(Namespace,Name,.Properties) %SYS>i 'Status w !,"Error="$SYSTEM.Status.GetErrorText(Status) %SYS>zw Properties Properties("Collation")=5 Properties("Database")="SAMPLES" Properties("LockDatabase")="" %SYS>s Properties("Database")="TEST" %SYS>s Status=##Class(Config.MapGlobals).Modify(Namespace,Name,.Properties) %SYS>i 'Status w !,"Error="$SYSTEM.Status.GetErrorText(Status) ; Now use Objects to modify properties %SYS>s Obj=##Class(Config.MapGlobals).Open(Namespace,Name) ; We could have used i ##Class(Config.MapGlobals).Exists(Namespace,Name,.Obj) instead of Open() %SYS>w Obj.Database TEST %SYS>s Obj.Database="USER" %SYS>s Status=Obj.%Save() %SYS>i 'Status w !,"Error="$SYSTEM.Status.GetErrorText(Status) ; Now delete the object we just created %SYS>s Status=##Class(Config.MapGlobals).Delete(Namespace,Name) %SYS>i 'Status w !,"Error="$SYSTEM.Status.GetErrorText(Status)

Parameters

EMSSERVICE

Parameter EMSSERVICE [ Internal ] = "Namespace";

Properties

Collation

Property Collation As %Integer(MINVAL = 0) [ InitialExpression = 5, Required ];

Default collation of the global

Database

Property Database As %String(MAXLEN = 64, MINLEN = 1) [ Required ];

Database to map global to.

LockDatabase

Property LockDatabase As %String(MAXLEN = 64, MINLEN = 0);

Database to map global lock to.

Methods

DatabaseSet

Method DatabaseSet(Val) As %Status [ Internal ]

Force the Database name to be uppercase.

LockDatabaseSet

Method LockDatabaseSet(Val) As %Status [ Internal ]

Force the Lock Database name to be uppercase.

CheckGlobalMapOverlap

ClassMethod CheckGlobalMapOverlap(Namespace As %String, Entry As %String = "", CPFFile As %String = "", Flags As %Integer = 0) As %Status [ Internal ]

Check whether the input Global Name Mapping entry could cause overlap in the current configuration.

Parameters:
Namespace - Namespace of the global mapping to be checked.
Entry - a Global Name mapping entry to be checked before it is added to the configuration.
"" - Check all global name mapping in the namespace.
GlobalNameMapping) - Check the specific Global Name Mappig entry to be added to the configuration.
CPFFile - Name of the CPF file to use. A null string means use the active CPF file.

Returns true if there is no mapping overlap. Otherwise return false with error informtion.

CheckSLMOverlap

ClassMethod CheckSLMOverlap(Namespace As %String, SLMEntry As %String = "", CPFFile As %String = "", Flags As %Integer = 0) As %Status [ Internal ]

Check whether the input SLM entry could cause overlap in the current configuration.

Parameters:
Namespace - Namespace of the global mapping to be checked.
Entry - a SLM entry to be checked before it is added to the configuration.
"" - Check all SLM mapping for all current configured globals in the namespace.
GlobalName - Check the SLM entries for specific global configured.
GlobalName(...) - Check the specific SLM entry (with subscript) to be added to the configuration.
CPFFile - Name of the CPF file to use. A null string means use the active CPF file.

Returns true if there is no SLM overlap. Otherwise return false with error informtion.

GetAllMappings

ClassMethod GetAllMappings(Namespace As %String, ByRef Mappings, CPFFile As %String = "", Flags As %Integer = 0) As %Status [ Internal ]

Get all global mappings for a specified namespace, including subscript level mappings, and including %ALL mappings. Used to determine mappings which need to be propagated to shards.

Parameters:
Namespace - Namespace whose mappings are returned.
Mappings - Returns mapped global names by reference, as array subscripted by global name, with value set to "%ALL" if global name was mapped in %ALL, else with value set to specified Namespace.
CPFFile - Name of the CPF file to use. A null string means use the active CPF file.
Flags - Can optionally specify $$$CPFImport to import CPF file into a special global.

Returns status.

CreateCallBack

ClassMethod CreateCallBack(Obj As %ObjectHandle, Data As %String) As %Status [ Internal ]

Called by the Create method during import from a CPF file.

IsValidSubscript

ClassMethod IsValidSubscript(Sub As %String, Collation As %Integer = 5) As %Status

Returns true if the argument passes the Subscript/Sbscript range syntax check.
Internal use only.
Note that this is also called by EMS, and shouldn't reference any %SYS Config info

%OnAddToSaveSet

Method %OnAddToSaveSet(depth As %Integer = 3, insert As %Integer = 0, callcount As %Integer = 0) As %Status [ Private, ServerOnly = 1 ]

Called from %Save().
Set some fields to their defaults, and normalize begin:end.

%OnDeleteCallBack

ClassMethod %OnDeleteCallBack(Obj As %ObjectHandle) As %Status

Called from %Delete().
Any error returned here will keep the object from being deleted.

%OnValidateObject

Method %OnValidateObject() As %Status [ Internal ]

This is called from %Save().
Any error returned from this will cause the object to not be saved.

ListExecute

ClassMethod ListExecute(ByRef %qHandle As %Binary, Namespace As %String, Names As %String = "*", CPFFile As %String = "", Flags As %Integer = 0) As %Status [ Internal ]

List MapGlobals in a CPF file.

Parameters:
Names - Comma separated list of MapGlobal names
"*" - All records match
"String,String1" - Any records matching one of these elements
"String*" - Any record starting with "String"
"String,String1*,String2" - Any record matching one of these elements, or starting with "String1"
CPFFile - Name of the CPF file to use. A null string means use the active CPF file.
Flags - Currently ignored.
Format
0 - Standard report list format
1 - ^CONFIG global format
2 - CPF file format format
Note: This query may change in future versions

ListFetch

ClassMethod ListFetch(ByRef %qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ Internal, PlaceAfter = ListExecute, PublicList = qHandle ]

ListClose

ClassMethod ListClose(ByRef %qHandle As %Binary) As %Status [ Internal, PlaceAfter = ListExecute, PublicList = qHandle ]

ListMapEditsExecute

ClassMethod ListMapEditsExecute(ByRef qHandle As %Binary, Namespace As %String) As %Status

List entries in CPFMappingEdit temporary storage

ListMapEditsClose

ClassMethod ListMapEditsClose(ByRef qHandle As %Binary) As %Status [ PlaceAfter = ListEditsExecute ]

ListMapEditsFetch

ClassMethod ListMapEditsFetch(ByRef qHandle As %Binary, ByRef Row As %List, ByRef AtEnd As %Integer = 0) As %Status [ PlaceAfter = ListEditsExecute ]