【问题标题】:Intersystems caché - sql storage definitionIntersystems caché - sql 存储定义
【发布时间】:2015-02-23 15:41:11
【问题描述】:

如何设置 %Dictionary.StorageSQLMapDefinition 类的 Name 属性? 我有这个代码:

set storMaps = ##class(%Dictionary.StorageSQLMapDefinition).%New()
set storMaps.Name = ?????

而且我不知道如何设置 storMaps.Name。 Name 属性的数据类型。根据文档,是 %Dictionary.SQLIdentifier。但我不知道如何设置此属性。我收到一个错误:

SQL 映射类型无效

【问题讨论】:

    标签: intersystems-cache objectscript


    【解决方案1】:

    您可能忘记了 %Dictionary.StorageDefintion。

        set clsDef=##class(%Dictionary.ClassDefinition).%OpenId("User.Test")
    
        set storage=##class(%Dictionary.StorageDefinition).%New()
        set storage.Name="Test"
        set storage.Type="%CacheSQLStorage" // this is important
    
        set storageMap=##class(%Dictionary.StorageSQLMapDefinition).%New()
        set storageMap.Name="MasterMap"
        set storageMap.Global="^global"
        do storage.SQLMaps.Insert(storageMap)
    
        set data=##class(%Dictionary.StorageSQLMapDataDefinition).%New()
        set data.Name="name"
        set data.Node=1
        do storageMap.Data.Insert(data)
    
        set data=##class(%Dictionary.StorageSQLMapDataDefinition).%New()
        set data.Name="type"
        set data.Node=2
        do storageMap.Data.Insert(data)
    
        set subscript=##class(%Dictionary.StorageSQLMapSubDefinition).%New()
        set subscript.Name=1
        set subscript.Expression="""test"""
        do storageMap.Subscripts.Insert(subscript)
    
        set subscript=##class(%Dictionary.StorageSQLMapSubDefinition).%New()
        set subscript.Name=2
        set subscript.Expression="{ID}"
        do storageMap.Subscripts.Insert(subscript)
    
        set rowidspec=##class(%Dictionary.StorageSQLMapRowIdSpecDefinition).%New()
        set rowidspec.Name=1
        set rowidspec.Expression="{L2}"
        set rowidspec.Field="ID"
        do storageMap.RowIdSpecs.Insert(rowidspec)
    
        do clsDef.Storages.Insert(storage)
        set tSC=clsDef.%Save()
    

    上面的代码会像这样创建存储

    <Storage name="Test">
    <SQLMap name="MasterMap">
    <Data name="name">
    <Node>1</Node>
    </Data>
    <Data name="type">
    <Node>2</Node>
    </Data>
    <Global>^global</Global>
    <RowIdSpec name="1">
    <Expression>{L2}</Expression>
    <Field>ID</Field>
    </RowIdSpec>
    <Subscript name="1">
    <Expression>"test"</Expression>
    </Subscript>
    <Subscript name="2">
    <Expression>{ID}</Expression>
    </Subscript>
    </SQLMap>
    <Type>%CacheSQLStorage</Type>
    </Storage>
    

    【讨论】:

    • 非常感谢,例如。我的问题非常愚蠢。我不小心尝试设置 storageMap.Data = "data" 然后我犯了一些更愚蠢的错误。非常感谢,这不是你第一次节省我的时间 :)
    猜你喜欢
    • 2015-04-02
    • 1970-01-01
    • 2013-06-15
    • 2017-05-07
    • 2020-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 2011-09-20
    相关资源
    最近更新 更多