SETPROPERTY

此函数用作操作的一部分,将多个属性保存到 XML 中。不与操作一起使用时,SETPROPERTY 无法修改 XML,它仅返回当前 XML。例如,此公式作为“设置参数”操作的一部分,写入名为 DemoXML 的变量:
=SETPROPERTY(ReportVariables.DemoXML.Text, "visibility","ReportObjects.ListView6.Alias" ,"false")
但是,在插入单元格时,相同的公式返回 DemoXML 变量的当前值:
<Table><Row name="visibility"><Property name="ReportObjects.ListView6.Alias" value="False" /></Row></Table>

因此,若要修改变量,必须使用操作将 SETPROPERTY 函数返回的输出指派给变量。

例如,在列表视图对象(如组合框)上,定义“设置参数”操作,使其在组合框中的选择更改时触发。在创建操作对话框的“参数”部分,选择要填充为“名称”的变量,将 SETPROPERTY 函数定义为“值”。在“视图”模式下,当触发操作时,参数即可填充。

可以添加、修改或删除任何属性。

可以使用此函数设置单个属性和值或者每个都有一个值的多个属性。例如,可使用报告中的切片维度的值填充 XML 变量。还可以使用此函数从变量中删除属性和值。

可使用 SETPROPERTY 引用特定元素或引用超级数据块单元格。

若要从变量的属性返回值,使用 GETPROPERTY。

可在字符串的开始或结束位置使用星号 (*) 字符作为通配符。例如,用于返回特定关键字或属性。字符串内的星号不能用作通配符。通配符搜索仅返回第一个匹配的关键字或属性。
注意

我们无法保证关键字或属性的顺序也匹配。

下面的示例基于“示例”应用程序并使用名为“Unique”和“Caption”的属性存储元素的唯一名称和标题:

语法

SETPROPERTY("XML_properties","key","property","value")

公式的第一个参数可以是变量或字符串。

* 通配符可与键以及属性参数结合使用,以便同时覆盖或删除多个值。

单个属性和值的示例

  1. =SETPROPERTY(globalvariables.gv_property,"[Product]","Unique",
    "[Product].[All Tires].[Car Tires All Season]")
  2. =SETPROPERTY(globalvariables.gv_property,reportobjects.Hyperblock4.Text,
    "Unique","[Product].[All Tires].[Car Tires All Season]")
  3. =SETPROPERTY(globalvariables.gv_property,"reportvariables.rv_dimension.text","Unique",
    "reportvariables.rv_element.text")

在所有三个示例中,“产品”维度为键,而属性名称为“唯一”。

在第一个示例中,指定“产品”维度和产品的唯一名称。在第二个示例中,指定包含“产品”维度的超级数据块的名称。第三个示例引用含有维度名称以及元素唯一名称的报告变量。

在 XML 定义中,键构成行名称。

设置多个属性和值

SETPROPERTY("XML_properties", "key", "property","value",{,"property"}{,"value"})

示例

=SETPROPERTY(globalvariables._gv_property,"[Product]","unique","[Product].[All
		Tires].[Car Tires all Season]","Caption","Car Tires all Season")

多个键

可以在变量中存储多个键,但是使用一个 SETPROPERTY 函数无法实现此目的。若要存储多个键,使用超级数据块或嵌套多个 SETPROPERTY 函数。例如:
=SETPROPERTY(SETPROPERTY("XML_properties","key","property","value"),
"key","property","value") 

每个键构成变量的 XML 定义中的一行。

或者,在多个操作中使用多个 SETPROPERTY 公式以填充单个 XML 变量 - 例如,将筛选器维度存储在动态报告中。

删除单个属性

SETPROPERTY("XML_properties", "key", "property","")

示例

从存储“产品”维度的元素的唯一名称和标题的变量中删除“标题”属性。

=SETPROPERTY(globalvariables._gv_property,"[Product]","caption","")

删除多个属性

=SETPROPERTY("XML_properties","key","property","","property,"")

删除行的所有属性

=SETPROPERTY("XML_propertes","key")

以超级数据块执行 SETPROPERTY

SETPROPERTY 函数可引用超级数据块单元格。与超级数据块一起使用时,可以定义 XML 变量中的键、属性和值的组合:

  • 有多个属性和值对的一个键
  • 有一个属性和值对的多个键
  • 有多个属性和值对的多个键
  • 有多个属性和一个值的多个键

示例

这些示例在 B2、B3 和 B4 单元格中使用垂直超级数据块和名为 gv_SetProperty 的全局变量。单元格 B2 是键列,B3 是属性列,B4 是对应的值。

有多个属性和值对的一个键:

=SETPROPERTY(globalvariables.gv_setproperty,"[Product]",B3,B4)

有一个属性和值对的多个键:

=SETPROPERTY(globalvariables.gv_setproperty,B2,"Property","Value")

有多个属性和值对的多个键:

=SETPROPERTY(globalvariables.gv_setproperty,B2,B3,B4)

有多个属性和一个值的多个键:

=SETPROPERTY(globalvariables.gv_setproperty,B2,B3,"Value")

编辑和删除属性和值

当使用 SETPROPERTY 引用超级数据块单元格时,以下操作成为可能:

  • 从 XML 定义删除某行
  • 删除单个值
  • 删除多个属性
  • 更新或设置单个值
  • 更新或设置多个值

示例

从 XML 定义删除某行:

=SETPROPERTY(globalvariables.gv_setproperty,"Key")

删除单个值:

=SETPROPERTY(globalvariables.gv_setproperty,"Key","")

删除多个属性(例如,从属性列表删除属性 1 和属性 3):
=SETPROPERTY("XML_properties","key","property1","","property3","")

设置单个值:

=SETPROPERTY("XML_properties","key","property","value")

设置多个值:

=SETPROPERTY("XML_properties","key","property1","value1","property2",
"Value2","Property3","Value3")

在键上使用通配符更改多个值:

该变量有两个键,每个键有一个不同的值:
<Table><Row name="Key1"><Property name="property" value ="Value1" /></Row>
<Row name="Key2"><Property name="property" value ="Value2" /></Row></Table>
若要将值 1 和值 2 更改为新值:

=SETPROPERTY("XML_properties"," key* ","property","new_value")

通配符标识出两个键,而公式则更改它们的值。

在属性上使用通配符更改多个值:

该变量有两个键,每个键有两个属性和值:
<Table><Row name="Key1"><Property name="property1" value ="Value1"/>
<Property name="property2" value ="Value11"/></Row>
<Row name="Key2"><Property name="property1" value ="Value2" />
<Property name="property2" value ="Value21"/></Row></Table>

若要更改键 1 的属性 1 和属性 2 的值,使用:

=SETPROPERTY("XML_properties","key","property*","new_value")

通配符标识出键 1 的属性 1 和属性 2。

若要更改两个键的属性,使用键和属性的通配符:

=SETPROPERTY("XML_properties" ,"key*","property*","new_value")