Description
Create a new custom property, using a POST containing the metadata of custom property. The metadata includes required properties and optional properties.
Required Properties: name, propertyType, scopes, teamSites, lastUpdateUserId, teamSites
Optional Properties: order, hint, propertyDependency, valueCascading, domainOfValues, settings
Metadata Definition
Name:
a json string , length less than 50, use to save current custom property name
Scopes:
a json array, use to save domains of current custom property, you can use one or more values from list ("content", "task", "project" and "request").
PropertyType:
a json string, use to save type of current custom property, you can use only one value from type list ("multi-select", "single-select", "string", "date", "integer", "float", "tag", "boolean")
DomainOfValues:
a json array . if property type is "multi-select" or "single-select", need to set domainOfValues. The max count of values is 12000.
"id" - a json string, save a guid, to specified a domain of value, it should be unique in whole tenant.
"value" - a json string, length less than 255, save a domian value of current custom property.
"order" - a json integer, save order of current value in whole DomainOfValues array.
for example:
[
{
"id": "f6ede60a-9282-4162-852f-468b945eabc8",
"value": "AAA",
"order": 1
},
{
"id": "5248d82b-df24-4274-aa10-950c53807758",
"value": "BBB",
"order": 2
},
{
"id": "d6f500db-5cb1-49f7-8c7b-d5162ceedbd9",
"value": "CCC",
"order": 3
}
]
TeamSites:
a json object, to specify which teamsites can use this custom property, if Scopes only have "content", then teamSites must have at least one.
for below example, current custom property can be used in 3 teamsite.
"35720565-6c4a-4bdc-b119-c7f1fdcc778b" , "fec5b798-855c-4872-880e-b34a45270af0", "5e51240a-a64d-4b2d-bc25-39b073c8cf39" are teamsites.
"isVisibleInDocCenter" - a json boolean, if custom property need to be visible in DocCenter for current teamsite.
"order" - a json integer, the order of current teamsite in TeamSites.
{
"35720565-6c4a-4bdc-b119-c7f1fdcc778b": {
"order": 0,
"isVisibleInDocCenter": false
},
"fec5b798-855c-4872-880e-b34a45270af0": {
"order": 1,
"isVisibleInDocCenter": false
},
"5e51240a-a64d-4b2d-bc25-39b073c8cf39": {
"order": 2,
"isVisibleInDocCenter": false
}
}
LastUpdateUserId:
a json string, save a integer or a guid, to specify user id of taking this operation.
Hint:
a json string, length less than 255, it is a helper message, include description of custom property.
Order:
a json integer, the custom property order in whole list.
Settings:
a json array, include serveral settings of Search, Library, DocCenter there are some settings:
{
"showInFilter": true,
"showInDocCenter": false,
"showInDocCenterFilter": false,
"suggestionsEnabled": false,
"searchFacetOrder": 96,
"IsSearchable": false,
"editability": "Editable"
}
- “showInFilter - a json boolean, identify if current custom property can show as search filter of Library
- “showInDocCenter” - a json boolean, identify if current custom property can show in Doc Center.
- “showInDocCenterFilter" - a json boolean, identify if current custom property can show as search filter of Doc Center. There is a contrain between “showInDocCenter” and “showInDocCenterFilter". If “showInDocCenter” = true, then “showInDocCenterFilter" can be true or false. If “showInDocCenter” = false, then “showInDocCenterFilter" should be false.
- "suggestionsEnabled" - a json boolean, is used by search.
- "searchFacetOrder" - a json integer, is used by search.
- "editability" - a json boolean, support 3 kinds of value: "Editable | ReadOnly | Hidden", "Editable" is means to allow to edit in Library, "ReadOnly" is means to allow to view, not allow to edit in Library, "Hidden" is means to not allow to show in Library.
PropertyDependency:
a json string array, save a json object, include all dependency logic rules of current custom property, for each custom property can have some dependency logic rules, max count is 32. In property dependency, logic rules are related some controller custom properties and current custom property. when controller custom properties changes and the chagnes meet dependency logic rules, current custom property will execute some actions to changes.
Notes: This is advanced feature, only for Premier and Enterprise Plus users.
Tip: for a propertyDependency, it is a json string with escape character, you replace \" with ", you will a valid json object like below.
Example-1, custom proerpty "CustomProperty-001"
CustomProperty-001
{
"continuationToken": "",
"cursor": "",
"kind": "List",
"count": 1,
"totalCount": 1,
"items": [
{
"kind": "CustomProperty",
"name": "CustomProperty-001",
"propertyType": "string",
"order": 201,
"hint": "Helper text",
"domainOfValues": null,
"settings": {
"showInFilter": true,
"showInDocCenter": true,
"showInDocCenterFilter": false,
"suggestionsEnabled": false,
"searchFacetOrder": 0,
"IsSearchable": false,
"editability": "Editable"
},
"scopes": {
"content": {
"isRequired": false,
"isRequiredForPublishing": true,
"isVisibleInRequestForm": false
}
},
"teamSites": {
"1": {
"order": 0,
"isVisibleInDocCenter": true
}
},
"lastUpdateUserId": "wVK7B9gstXpzseMkUH3Xpw",
"lastUpdateDateTime": "2023-02-13T06:41:13.3987243",
"propertyDependency": [
"{\"id\":\"ee7ce090-7ac0-4519-a829-2d25914d44c5\",\"name\":\"logic 1\",\"match\":{\"conditions\":[{\"attribute\":\"traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.value\",\"operator\":\"Equal\",\"value\":1}],\"filters\":[],\"operator\":\"And\"},\"options\":{\"isVisible\":true,\"isRequiredForPublish\":true,\"isAutoSelect\":false,\"selectValueIds\":null}}"
],
"tenantId": "db6f0b99-6b2b-4ace-84e1-7aec5db297c6",
"id": "9266e92c-965c-4ff5-be42-84bc971baab1",
"etag": "XbimDK4B_0uWFrXQWcbHRQ",
"timestamp": "2023-02-13T06:41:13.4140000Z"
}
]
}
CustomProperty-001 's PropertyDependecy
"propertyDependency": [
"{\"id\":\"ee7ce090-7ac0-4519-a829-2d25914d44c5\",\"name\":\"logic 1\",\"match\":{\"conditions\":[{\"attribute\":\"traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.value\",\"operator\":\"Equal\",\"value\":1}],\"filters\":[],\"operator\":\"And\"},\"options\":{\"isVisible\":true,\"isRequiredForPublish\":true,\"isAutoSelect\":false,\"selectValueIds\":null}}"
]
Remove escape character,get a valid json object. Please note that we add comments for each metadata of propertyDependency.
{
"id": "ee7ce090-7ac0-4519-a829-2d25914d44c5", /* dependency id, don't allow duplicated*/
"name": "logic 1", /* dependency name, don't allow duplicated*/
"match": { /* logic rules, for usage, reference "Find custom properties by filter*/
"conditions": [
{
/* "traits.customProperties.fields.properties" is prefix */
/* "090b6c87-44a7-4250-babd-dda06c5e23ee" is controller custom property id */
/* "value.value" is meanings to use custom property value. */
"attribute": "traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.value",
"operator": "Equal",
"value": 1
}
],
"filters": [],
"operator": "And"
},
/* when controller custom property value change and meet above logic rule, then execute below actions */
"options": {
"isVisible": true, /* hide on UI*/
"isRequiredForPublish": true, /* is required for publish*/
"isAutoSelect": false, /* when meet rule, if auto change value of current custom property*/
"selectValueIds": null /* if isAutoSelect = true, need to include a value arrray*/
}
}
On Seismic UI, we can see like below picture for "CustomProperty-001".
We can see 2 custom properties, current custom property "CustomProperty-001", controller custom property(name= "1123 whole number readonly", id=090b6c87-44a7-4250-babd-dda06c5e23ee).
For logic rule, each metadata definiton, you can see above details after json string remove escape character.
In logic rule, when type of controller custom property is "single-select" or "multi-select", you can specified value by "value.valueId" like below. you can see details in Example-2 "CustomProperty-002"
"attribute": "traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.valueId",
In logic rule, when type of controller custom property is NOT "single-select" or "multi-select", you can specified value by "value.value" like below. In current example, "090b6c87-44a7-4250-babd-dda06c5e23ee" is a string type, NOT "single-select" or "multi-select".
"attribute": "traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.value",
When controller custom property value change and meet logic rule, then current custom properties will execute some actions, include
hiding, auto-selecting and requiring properties for publishing, if auto-selecting = true, then need to set "selectValueIds" too.
Example 2 , custom proerpty "CustomProperty-002"
{
"continuationToken": "",
"cursor": "",
"kind": "List",
"count": 1,
"totalCount": 1,
"items": [
{
"kind": "CustomProperty",
"name": "CustomProperty-002",
"propertyType": "date",
"order": 202,
"hint": null,
"domainOfValues": null,
"settings": {
"showInFilter": true,
"showInDocCenter": false,
"showInDocCenterFilter": false,
"suggestionsEnabled": false,
"searchFacetOrder": 0,
"IsSearchable": false,
"editability": "Editable"
},
"scopes": {
"content": {
"isRequired": false,
"isRequiredForPublishing": true,
"isVisibleInRequestForm": false
}
},
"teamSites": {
"1": {
"order": 0,
"isVisibleInDocCenter": true
}
},
"lastUpdateUserId": "wVK7B9gstXpzseMkUH3Xpw",
"lastUpdateDateTime": "2023-02-13T08:23:33.4460037",
"propertyDependency": [
"{\"id\":\"32e6f06c-c107-4faa-8673-fcabc6602ef5\",\"name\":\"logic 1\",\"match\":{\"conditions\":[{\"attribute\":\"traits.customProperties.fields.properties.689f24b8-bb90-488d-be18-bce723256bbb.value.valueId\",\"operator\":\"In\",\"value\":[\"a8fe9d74-a1af-41fc-9cf9-b99e9cf73e2e\"]},{\"attribute\":\"traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.value\",\"operator\":\"Equal\",\"value\":1}],\"filters\":[],\"operator\":\"And\"},\"options\":{\"isVisible\":true,\"isRequiredForPublish\":true,\"isAutoSelect\":false,\"selectValueIds\":null}}"
],
"tenantId": "db6f0b99-6b2b-4ace-84e1-7aec5db297c6",
"id": "16d0d2bd-23bd-4c65-ac19-424e56e380b3",
"etag": "GPLQaF-PeESmCl_1pBVJ0A",
"timestamp": "2023-02-13T08:23:33.4620000Z"
}
]
}
CustomProperty-002 's PropertyDependecy
"propertyDependency": [
"{\"id\":\"32e6f06c-c107-4faa-8673-fcabc6602ef5\",\"name\":\"logic 1\",\"match\":{\"conditions\":[{\"attribute\":\"traits.customProperties.fields.properties.689f24b8-bb90-488d-be18-bce723256bbb.value.valueId\",\"operator\":\"In\",\"value\":[\"a8fe9d74-a1af-41fc-9cf9-b99e9cf73e2e\"]},{\"attribute\":\"traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.value\",\"operator\":\"Equal\",\"value\":1}],\"filters\":[],\"operator\":\"And\"},\"options\":{\"isVisible\":true,\"isRequiredForPublish\":true,\"isAutoSelect\":false,\"selectValueIds\":null}}"
],
Remove Escape Character - get a valid json object. Please note that we add comments for each metadata of propertyDependency.
{
"id": "32e6f06c-c107-4faa-8673-fcabc6602ef5", /* dependency id, don't allow duplicated.*/
"name": "logic 1", /*dependency name, don't allow duplicated.*/
"match": { /* logic rules , for usage, reference "Find custom properties by filter*/
"conditions": [
{
/* "traits.customProperties.fields.properties" is prefix */
/* "689f24b8-bb90-488d-be18-bce723256bbb" is controller custom property id */
/* "value.valueId" is meanings to use custom property Id. */
"attribute": "traits.customProperties.fields.properties.689f24b8-bb90-488d-be18-bce723256bbb.value.valueId",
"operator": "In",
"value": [
"a8fe9d74-a1af-41fc-9cf9-b99e9cf73e2e" /* custom property value Id that difined in DomainOfValues of controller custom property */
]
},
{
/* "traits.customProperties.fields.properties" is prefix */
/* "090b6c87-44a7-4250-babd-dda06c5e23ee" is controller custom property id */
/* "value.value" is meanings to use custom property value. */
"attribute": "traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.value",
"operator": "Equal",
"value": 1
}
],
"filters": [],
"operator": "And"
},
"options": {
"isVisible": true, /* hide on UI*/
"isRequiredForPublish": true, /* is required for publish*/
"isAutoSelect": false, /* when meet rule, if auto change value of current custom property*/
"selectValueIds": null /* if isAutoSelect = true, need to include a value arrray*/
}
}
On Seismic UI, we can see like below picture for "CustomProperty-002".
We can see 3 custom properties, one current custom property "CustomProperty-001", two controller custom properties. For controller custom property, one is (name= "1123 whole number readonly", id="090b6c87-44a7-4250-babd-dda06c5e23ee"), another is (name= "001prop-3", id="689f24b8-bb90-488d-be18-bce723256bbb")
For logic rule, each metadata definiton, you can see above details after json string remove escape character.
In logic rule, the type of controller custom property (name= "001prop-3", id=090b6c87-44a7-4250-babd-dda06c5e23ee) is "single-select", so you need to by "value.valueId" like below.
{
/* "traits.customProperties.fields.properties" is prefix */
/* "689f24b8-bb90-488d-be18-bce723256bbb" is controller custom property id */
/* "value.valueId" is meanings to use custom property Id. */
"attribute": "traits.customProperties.fields.properties.689f24b8-bb90-488d-be18-bce723256bbb.value.valueId",
"operator": "In",
/* custom property value Id that difined in DomainOfValues of controller custom property */
"value": [
"a8fe9d74-a1af-41fc-9cf9-b99e9cf73e2e"
]
}
In logic rule, the type of controller custom property is string, NOT "single-select" or "multi-select", you can specified value by "value.value" like below.
{
/* "traits.customProperties.fields.properties" is prefix */
/* "090b6c87-44a7-4250-babd-dda06c5e23ee" is controller custom property id */
/* "value.value" is meanings to use custom property value. */
"attribute": "traits.customProperties.fields.properties.090b6c87-44a7-4250-babd-dda06c5e23ee.value.value",
"operator": "Equal",
"value": 1
}
When controller custom property value change and meet logic rule, then current custom properties will execute some actions, include
hiding, auto-selecting and requiring properties for publishing, if auto-selecting = true, then need to set "selectValueIds" too.
For condition, there are some example as your reference.
Condition Example 1: operator "In", is meaning to include any in array.
Controller custom property is "03fa9ce5-bf36-4aa7-a1b6-5f4ee677d2b8" , its type is "single-select".
{
"attribute": "traits.customProperties.fields.properties.03fa9ce5-bf36-4aa7-a1b6-5f4ee677d2b8.value.valueId",
"operator": "In",
"value": [
"94eab39e-169e-446c-b121-1b7bf233c4aa"
]
}
Condition Example 2: operator "Equal"
Controller custom property is "96252da4-613c-4ce3-a929-07df48c8670e", its type is "string". There are some operator can be used, like "NotEqual", "LessThan", "GreaterThan".
{
"attribute": "traits.customProperties.fields.properties.96252da4-613c-4ce3-a929-07df48c8670e.value.valueId",
"operator": "Equal",
"value": [
"df2d0a6d-5cf5-4315-9da9-28635b535ab6"
]
}
Condition Example 3: operator "ArrayContainsAny" - is meaning to include any in array.
Controller custom property is "2efcdd61-de2c-4801-93aa-6eab751842de", its type is "multi-select". And , at this cace, Current custom property is also "mult-select".
{
"attribute": "traits.customProperties.fields.properties.2efcdd61-de2c-4801-93aa-6eab751842de.value.valueId",
"operator": "ArrayContainsAny",
"value": [
"0d8c8612-ba56-4cd4-b0ac-43b7739eac28",
"585fffb3-64b9-44b2-8bea-ee09ab70c0a5"
]
}
Condition Example 4: operator "NotIn" is meaning to NOT include any in array.
Controller custom property is "040978ed-224a-40c9-ac11-fdf6ca4f9d9a" , its type is "single-select".
{
"attribute": "traits.customProperties.fields.properties.040978ed-224a-40c9-ac11-fdf6ca4f9d9a.value.valueId",
"operator": "NotIn",
"value": [
"8c55079c-f488-4bae-bbce-08bc829ec3b9"
]
}
ValueCascading:
a json string array, save a json object, inlcude value cascading logic rules of custom property. For each custom property, have at most one value cascading. The value cascading is available, only when type of controller and current custom property are "multi-select" or "single-select". ValueCascading logic rules is used to control what values in current custom propery are visible based on a controlling property’s selections.
Notes: This is advanced feature, only for Premier and Enterprise Plus users.
Example 1 CustomProperty-003
CustomProperty-003
{
"continuationToken": "",
"cursor": "",
"kind": "List",
"count": 1,
"totalCount": 1,
"items": [
{
"kind": "CustomProperty",
"name": "CustomProperty-003",
"propertyType": "single-select",
"order": 203,
"hint": null,
"domainOfValues": [
{
"id": "77e6c316-5b80-405a-9b89-679eef012700",
"value": "A",
"order": 1
},
{
"id": "bc41d610-d24d-45ea-adbc-de0d0f814bc0",
"value": "B",
"order": 2
}
],
"settings": {
"showInFilter": true,
"showInDocCenter": false,
"showInDocCenterFilter": false,
"suggestionsEnabled": false,
"searchFacetOrder": 0,
"IsSearchable": false,
"editability": "Editable"
},
"scopes": {
"content": {
"isRequired": false,
"isRequiredForPublishing": true,
"isVisibleInRequestForm": false
}
},
"teamSites": {
"1": {
"order": 0,
"isVisibleInDocCenter": true
}
},
"lastUpdateUserId": "wVK7B9gstXpzseMkUH3Xpw",
"lastUpdateDateTime": "2023-02-13T07:43:00.7442875",
"valueCascading": [
"{\"id\":\"d5d97016-cdb1-4690-8a7e-bab5bf7b79e2\",\"name\":\"logic 1\",\"controllerId\":\"b19fbf80-ef6d-46f0-be63-716d303dcac3\",\"isAutoSelect\":true,\"matches\":[{\"match\":{\"conditions\":[{\"attribute\":\"traits.customProperties.fields.properties.c540b9e5-8bc0-4545-b4eb-7fa237c69c7f.value.valueId\",\"operator\":\"Equal\",\"value\":\"91741140-a6ca-430d-9982-8b366c298ab1\"}],\"filters\":[],\"operator\":\"And\"},\"possibleValueIds\":[\"77e6c316-5b80-405a-9b89-679eef012700\"]},{\"match\":{\"conditions\":[{\"attribute\":\"traits.customProperties.fields.properties.c540b9e5-8bc0-4545-b4eb-7fa237c69c7f.value.valueId\",\"operator\":\"Equal\",\"value\":\"a0f31056-f87d-485d-9792-cf6937675af3\"}],\"filters\":[],\"operator\":\"And\"},\"possibleValueIds\":[\"bc41d610-d24d-45ea-adbc-de0d0f814bc0\"]}]}"
],
"tenantId": "db6f0b99-6b2b-4ace-84e1-7aec5db297c6",
"id": "e9fe9afe-e7f0-461b-8780-f3ce048414a7",
"etag": "9mAvsX0yFUCLGKKppsvPMA",
"timestamp": "2023-02-13T07:43:00.7710000Z"
}
]
}
CustomProperty-003 's valueCascading
"valueCascading": [
"{\"id\":\"d5d97016-cdb1-4690-8a7e-bab5bf7b79e2\",\"name\":\"logic 1\",\"controllerId\":\"b19fbf80-ef6d-46f0-be63-716d303dcac3\",\"isAutoSelect\":true,\"matches\":[{\"match\":{\"conditions\":[{\"attribute\":\"traits.customProperties.fields.properties.c540b9e5-8bc0-4545-b4eb-7fa237c69c7f.value.valueId\",\"operator\":\"Equal\",\"value\":\"91741140-a6ca-430d-9982-8b366c298ab1\"}],\"filters\":[],\"operator\":\"And\"},\"possibleValueIds\":[\"77e6c316-5b80-405a-9b89-679eef012700\"]},{\"match\":{\"conditions\":[{\"attribute\":\"traits.customProperties.fields.properties.c540b9e5-8bc0-4545-b4eb-7fa237c69c7f.value.valueId\",\"operator\":\"Equal\",\"value\":\"a0f31056-f87d-485d-9792-cf6937675af3\"}],\"filters\":[],\"operator\":\"And\"},\"possibleValueIds\":[\"bc41d610-d24d-45ea-adbc-de0d0f814bc0\"]}]}"
],
Remove Escape Character - get a valid json object. Please note that we add comments for each metadata of valueCascading.
{
"id": "d5d97016-cdb1-4690-8a7e-bab5bf7b79e2", /* valueCascading id, don't allow dupicated. */
"name": "logic 1", /* valueCascading rule name, don't allow dupicated. */
"controllerId": "b19fbf80-ef6d-46f0-be63-716d303dcac3", /* controller custom property id */
/* When controller custom property value chagne and meet rule, if need to change current proeprty value automatically*/
"isAutoSelect": true,
"matches": [ /* logic rules */
{
"match": {
"conditions": [
{
/* "traits.customProperties.fields.properties" is prefix */
/* "c540b9e5-8bc0-4545-b4eb-7fa237c69c7f" is controller custom property id */
/* "value.valueId" is meanings to use custom property value id. */
"attribute": "traits.customProperties.fields.properties.c540b9e5-8bc0-4545-b4eb-7fa237c69c7f.value.valueId",
"operator": "Equal",
/* custom property value Id that difined in DomainOfValues of controller custom property */
"value": "91741140-a6ca-430d-9982-8b366c298ab1"
}
],
"filters": [],
"operator": "And"
},
/* custom property value Id that difined in DomainOfValues of current custom property */
"possibleValueIds": [
"77e6c316-5b80-405a-9b89-679eef012700"
]
},
{
"match": {
"conditions": [
{
/* "traits.customProperties.fields.properties" is prefix */
/* "c540b9e5-8bc0-4545-b4eb-7fa237c69c7f" is controller custom property id */
/* "value.valueId" is meanings to use custom property value id. */
"attribute": "traits.customProperties.fields.properties.c540b9e5-8bc0-4545-b4eb-7fa237c69c7f.value.valueId",
"operator": "Equal",
"value": "a0f31056-f87d-485d-9792-cf6937675af3"
}
],
"filters": [],
"operator": "And"
},
/* custom property value Id that difined in DomainOfValues of current custom property */
"possibleValueIds": [
"bc41d610-d24d-45ea-adbc-de0d0f814bc0"
]
}
]
}
On Seismic UI, we can see like below picture for "CustomProperty-003".
In Example 3, when controller custom property "activity-multi" select value "MM1", then current custom property "CustomProperty-003" only appear value "A".
when controller custom property "activity-multi" select value "MM2", then current custom property "CustomProperty-003" only appear value "B".
when controller custom property "activity-multi" select other value, then current custom property "CustomProperty-003" show nothing.
NOTES: There some limits for ValueCascading and PropertyDependency
The max count of "possibleValueIds" is 1000
The max count of "match" is 1000.
The max max of "condition is 32.
\uD83D\uDCD8 Info
For PropertyDependency and ValueCascading, you can get a custom property with similar logic rules created by Seismic UI, then replace value according to your requirement. It is better to send Seismc to review.
For date time value, use UTC time, the format like 2023-01-04T00:00:00.0000000Z,
SCOPES
Requires
seismic.custom_property.manage
. See Permissions for additional details.