diff --git a/.eslintrc.json b/.eslintrc.json index 355ff1839..e95ead59b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,8 +1,7 @@ { "env": { "es6": true, - "node": true, - "mocha": true + "node": true }, "extends": [ "eslint:recommended", @@ -67,7 +66,6 @@ "unicorn/prefer-set-has": "off", "unicorn/prefer-spread": "off", "unicorn/prefer-string-replace-all": "error", - "unicorn/unicorn/no-lonely-if": "off", "arrow-body-style": ["error", "as-needed"], "curly": "error", "no-console": "error", @@ -84,6 +82,7 @@ } } ], + "jsdoc/require-param-type": "error", "jsdoc/tag-lines": ["warn", "any", { "startLines": 1 }], "spaced-comment": ["warn", "always", { "block": { "exceptions": ["*"], "balanced": true } }] }, @@ -103,7 +102,8 @@ "extends": ["plugin:mocha/recommended"], "plugins": ["mocha"], "rules": { - "mocha/no-mocha-arrows": "off" + "mocha/no-mocha-arrows": "off", + "mocha/no-pending-tests": "off" } } ] diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index c133ed59c..a5c9d99d7 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -39,6 +39,7 @@ body: label: Version description: What version of our software are you running? (mcdev --version) options: + - 5.2.0 - 5.1.0 - 5.0.2 - 5.0.1 diff --git a/.github/workflows/coverage-develop-branch.yml b/.github/workflows/coverage-develop-branch.yml index d14c5fbe3..6122489af 100644 --- a/.github/workflows/coverage-develop-branch.yml +++ b/.github/workflows/coverage-develop-branch.yml @@ -26,8 +26,6 @@ jobs: - run: npm ci --ignore-scripts - - run: npm run lint - - name: Run mcdev-tests with coverage run: npm run coverage diff --git a/.github/workflows/coverage-main-branch.yml b/.github/workflows/coverage-main-branch.yml index 9aa2b1ff3..00f3883ec 100644 --- a/.github/workflows/coverage-main-branch.yml +++ b/.github/workflows/coverage-main-branch.yml @@ -26,8 +26,6 @@ jobs: - run: npm ci --ignore-scripts - - run: npm run lint - - name: Run mcdev-tests with coverage run: npm run coverage diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 82d75fb38..81689ff67 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -23,8 +23,6 @@ jobs: - run: npm ci --ignore-scripts - - run: npm run lint - - name: Run mcdev-tests with coverage run: npm run coverage diff --git a/.husky/post-checkout b/.husky/post-checkout index 2607e40f5..5bf2cfe67 100644 --- a/.husky/post-checkout +++ b/.husky/post-checkout @@ -32,6 +32,7 @@ if [[ ${PACKAGES[@]} ]]; then done echo "📦 Running npm install to update your dependencies..." npm install + npm run lint:fix else echo "📦 All packages up-to-date. No need to run npm install." fi diff --git a/.husky/post-merge b/.husky/post-merge index 06f668cd4..a5b4e597b 100644 --- a/.husky/post-merge +++ b/.husky/post-merge @@ -16,6 +16,7 @@ if [[ ${PACKAGES[@]} ]]; then done echo "📦 Running npm install to update your dependencies..." npm install + npm run lint:fix else echo "📦 All packages up-to-date. No need to run npm install." fi \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 1228879f3..a71f41ad1 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -15,6 +15,10 @@ "editorconfig.editorconfig", "esbenp.prettier-vscode", + // mcdev tests + "hbenl.vscode-mocha-test-adapter", + "IBM.output-colorizer", + // Markdown / Readme.md "joernberkefeld.markdown-preview-bitbucket-innersource" ] diff --git a/docs/dist/documentation.md b/docs/dist/documentation.md index 8027e7538..8a2189b07 100644 --- a/docs/dist/documentation.md +++ b/docs/dist/documentation.md @@ -17,6 +17,9 @@ Source and target business units are also compared before the deployment to appl
AttributeGroupMetadataType

AttributeGroup MetadataType

+
AttributeSetMetadataType
+

AttributeSet MetadataType

+
AutomationMetadataType

Automation MetadataType

@@ -105,9 +108,6 @@ Provides default functionality that can be overwritten by child metadata type cl
SendClassificationMetadataType

SendClassification MetadataType

-
SetDefinitionMetadataType
-

SetDefinition MetadataType

-
TransactionalEmailTransactionalMessage

TransactionalEmail MetadataType

@@ -186,11 +186,38 @@ Provides default functionality that can be overwritten by child metadata type cl
csvToArray(csv)Array.<string>

helper to convert CSVs into an array. if only one value was given, it's also returned as an array

+
Mcdev.(methodName, businessUnit, [selectedType], [keys])Promise.<Object.<string, Array.<string>>>
+

run a method across BUs

+
+
Mcdev.(methodName, cred, bu, [type], keyArr)Promise.<Array.<string>>
+

helper for Mcdev.#runMethod

+
+
Mcdev.(selectedType, buObject)Array.<string>
+

helper for Mcdev.#runOnBU

+
+
Mcdev.(cred, bu, type, [keyArr])Promise.<Array.<string>>
+

Updates the key to match the name field

+
+
Automation.(metadata)boolean
+

helper for postRetrieveTasks and execute

+
+
Automation.(metadataMap, key)Promise.<{key:string, response:object}>
+

helper for execute

+
+
Automation.(metadataEntry)Promise.<{key:string, response:object}>
+

helper for execute

+
+
Automation.(metadata)Promise.<{key:string, response:object}>
+

helper for pause

+
+
Automation.(metadata)
+

helper for preDeployTasks and execute

+
Automation.(metadataMap, key)Promise.<void>

helper for postDeployTasks

-
Automation.(metadataMap, originalMetadataMap, key)
-

helper for postDeployTasks

+
Automation.(metadataMap, originalMetadataMap, key, [oldKey])Promise.<{key:string, response:object}>
+

helper for postDeployTasks

getUserName(userList, item, fieldname)string
@@ -371,10 +398,10 @@ Source and target business units are also compared before the deployment to appl * [new Deployer(properties, buObject)](#new_Deployer_new) * _instance_ * [.metadata](#Deployer+metadata) : TYPE.MultiMetadataTypeMap - * [._deploy([typeArr], [keyArr], [fromRetrieve], [isRefresh])](#Deployer+_deploy) ⇒ Promise.<TYPE.MultiMetadataTypeMap> + * [._deploy([typeArr], [keyArr])](#Deployer+_deploy) ⇒ Promise.<TYPE.MultiMetadataTypeMap> * _static_ - * [.deploy(businessUnit, [selectedTypesArr], [keyArr], [fromRetrieve])](#Deployer.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - * [._deployBU(cred, bu, properties, [typeArr], [keyArr], [fromRetrieve])](#Deployer._deployBU) ⇒ Promise.<TYPE.MultiMetadataTypeMap> + * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Deployer.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> + * [._deployBU(cred, bu, properties, [typeArr], [keyArr])](#Deployer._deployBU) ⇒ Promise.<TYPE.MultiMetadataTypeMap> * [.readBUMetadata(deployDir, [typeArr], [listBadKeys])](#Deployer.readBUMetadata) ⇒ TYPE.MultiMetadataTypeMap * [.createFolderDefinitions(deployDir, metadata, metadataTypeArr)](#Deployer.createFolderDefinitions) ⇒ void @@ -395,7 +422,7 @@ Creates a Deployer, uses v2 auth if v2AuthOptions are passed. **Kind**: instance property of [Deployer](#Deployer) -### deployer.\_deploy([typeArr], [keyArr], [fromRetrieve], [isRefresh]) ⇒ Promise.<TYPE.MultiMetadataTypeMap> +### deployer.\_deploy([typeArr], [keyArr]) ⇒ Promise.<TYPE.MultiMetadataTypeMap> Deploy all metadata that is located in the deployDir **Kind**: instance method of [Deployer](#Deployer) @@ -405,12 +432,10 @@ Deploy all metadata that is located in the deployDir | --- | --- | --- | | [typeArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type (can include subtype) | | [keyArr] | Array.<string> | limit deployment to given metadata keys | -| [fromRetrieve] | boolean | if true, no folders will be updated/created | -| [isRefresh] | boolean | optional flag to indicate that triggeredSend should be refreshed after deployment of assets | -### Deployer.deploy(businessUnit, [selectedTypesArr], [keyArr], [fromRetrieve]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> +### Deployer.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> Deploys all metadata located in the 'deploy' directory to the specified business unit **Kind**: static method of [Deployer](#Deployer) @@ -421,12 +446,11 @@ Deploys all metadata located in the 'deploy' directory to the specified business | businessUnit | string | references credentials from properties.json | | [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | | [keyArr] | Array.<string> | limit deployment to given metadata keys | -| [fromRetrieve] | boolean | optionally deploy whats defined via selectedTypesArr + keyArr directly from retrieve folder instead of from deploy folder | -### Deployer.\_deployBU(cred, bu, properties, [typeArr], [keyArr], [fromRetrieve]) ⇒ Promise.<TYPE.MultiMetadataTypeMap> -helper for [deploy](deploy) +### Deployer.\_deployBU(cred, bu, properties, [typeArr], [keyArr]) ⇒ Promise.<TYPE.MultiMetadataTypeMap> +helper for [deploy](#Deployer.deploy) **Kind**: static method of [Deployer](#Deployer) **Returns**: Promise.<TYPE.MultiMetadataTypeMap> - ensure that BUs are worked on sequentially @@ -438,7 +462,6 @@ helper for [deploy](deploy) | properties | TYPE.Mcdevrc | General configuration to be used in retrieve | | [typeArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | | [keyArr] | Array.<string> | limit deployment to given metadata keys | -| [fromRetrieve] | boolean | optionally deploy whats defined via selectedTypesArr + keyArr directly from retrieve folder instead of from deploy folder | @@ -448,11 +471,11 @@ Returns metadata of a business unit that is saved locally **Kind**: static method of [Deployer](#Deployer) **Returns**: TYPE.MultiMetadataTypeMap - Metadata of BU in local directory -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| deployDir | string | | root directory of metadata. | -| [typeArr] | Array.<string> | | limit deployment to given metadata type | -| [listBadKeys] | boolean | false | do not print errors, used for badKeys() | +| Param | Type | Description | +| --- | --- | --- | +| deployDir | string | root directory of metadata. | +| [typeArr] | Array.<string> | limit deployment to given metadata type | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | @@ -483,7 +506,7 @@ main class * [.explainTypes()](#Mcdev.explainTypes) ⇒ Array.<object> * [.upgrade()](#Mcdev.upgrade) ⇒ Promise.<boolean> * [.retrieve(businessUnit, [selectedTypesArr], [keys], [changelogOnly])](#Mcdev.retrieve) ⇒ Promise.<object> - * [.deploy(businessUnit, [selectedTypesArr], [keyArr], [fromRetrieve])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> + * [.deploy(businessUnit, [selectedTypesArr], [keyArr])](#Mcdev.deploy) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> * [.initProject([credentialsName])](#Mcdev.initProject) ⇒ Promise.<void> * [.joinProject()](#Mcdev.joinProject) ⇒ Promise.<void> * [.findBUs(credentialsName)](#Mcdev.findBUs) ⇒ Promise.<void> @@ -496,8 +519,10 @@ main class * [.buildDefinition(businessUnit, selectedType, name, market)](#Mcdev.buildDefinition) ⇒ Promise.<void> * [.buildDefinitionBulk(listName, type, name)](#Mcdev.buildDefinitionBulk) ⇒ Promise.<void> * [.getFilesToCommit(businessUnit, selectedType, keyArr)](#Mcdev.getFilesToCommit) ⇒ Promise.<Array.<string>> - * [.execute(businessUnit, [selectedTypesArr], keys)](#Mcdev.execute) ⇒ Promise.<boolean> - * [._executeBU(cred, bu, [selectedTypesArr], keyArr)](#Mcdev._executeBU) ⇒ Promise.<boolean> + * [.schedule(businessUnit, [selectedType], [keys])](#Mcdev.schedule) ⇒ Promise.<Object.<string, Array.<string>>> + * [.execute(businessUnit, [selectedType], [keys])](#Mcdev.execute) ⇒ Promise.<Object.<string, Array.<string>>> + * [.pause(businessUnit, [selectedType], [keys])](#Mcdev.pause) ⇒ Promise.<Object.<string, Array.<string>>> + * [.fixKeys(businessUnit, selectedType, [keys])](#Mcdev.fixKeys) ⇒ Promise.<Object.<string, Array.<string>>> @@ -582,18 +607,17 @@ Retrieve all metadata from the specified business unit into the local file syste -### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr], [fromRetrieve]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> +### Mcdev.deploy(businessUnit, [selectedTypesArr], [keyArr]) ⇒ Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> Deploys all metadata located in the 'deploy' directory to the specified business unit **Kind**: static method of [Mcdev](#Mcdev) **Returns**: Promise.<Object.<string, TYPE.MultiMetadataTypeMap>> - deployed metadata per BU (first key: bu name, second key: metadata type) -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| businessUnit | string | | references credentials from properties.json | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | | limit deployment to given metadata type | -| [keyArr] | Array.<string> | | limit deployment to given metadata keys | -| [fromRetrieve] | boolean | false | optionally deploy whats defined via selectedTypesArr + keyArr directly from retrieve folder instead of from deploy folder | +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | references credentials from properties.json | +| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit deployment to given metadata type | +| [keyArr] | Array.<string> | limit deployment to given metadata keys | @@ -750,34 +774,61 @@ Build a specific metadata file based on a template using a list of bu-market com | selectedType | string | supported metadata type | | keyArr | Array.<string> | customerkey of the metadata | + + +### Mcdev.schedule(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Schedule an item (shortcut for execute --schedule) + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of scheduled item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + -### Mcdev.execute(businessUnit, [selectedTypesArr], keys) ⇒ Promise.<boolean> -Start an item (query) +### Mcdev.execute(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Start/execute an item **Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - true if all started successfully, false if not +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of executed item keys | Param | Type | Description | | --- | --- | --- | | businessUnit | string | name of BU | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit to given metadata types | -| keys | Array.<string> | customerkey of the metadata | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | - + -### Mcdev.\_executeBU(cred, bu, [selectedTypesArr], keyArr) ⇒ Promise.<boolean> -helper for [execute](execute) +### Mcdev.pause(businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +pause an item **Kind**: static method of [Mcdev](#Mcdev) -**Returns**: Promise.<boolean> - true if all items were executed, false otherwise +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys | Param | Type | Description | | --- | --- | --- | -| cred | string | name of Credential | -| bu | string | name of BU | -| [selectedTypesArr] | Array.<TYPE.SupportedMetadataTypes> | limit execution to given metadata type | -| keyArr | Array.<string> | customerkey of the metadata | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +### Mcdev.fixKeys(businessUnit, selectedType, [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +Updates the key to match the name field + +**Kind**: static method of [Mcdev](#Mcdev) +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of paused item keys + +| Param | Type | Description | +| --- | --- | --- | +| businessUnit | string | name of BU | +| selectedType | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | @@ -798,7 +849,7 @@ FileTransfer MetadataType * [._retrieveExtendedFile(metadata, subType, retrieveDir)](#Asset._retrieveExtendedFile) ⇒ Promise.<void> * [._readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly])](#Asset._readExtendedFileFromFS) ⇒ Promise.<string> * [.postRetrieveTasks(metadata)](#Asset.postRetrieveTasks) ⇒ TYPE.CodeExtractItem - * [.postDeployTasks(metadata, _, createdUpdated, [isRefresh])](#Asset.postDeployTasks) ⇒ Promise.<void> + * [.postDeployTasks(metadata, _, createdUpdated)](#Asset.postDeployTasks) ⇒ Promise.<void> * [.preDeployTasks(metadata, deployDir)](#Asset.preDeployTasks) ⇒ Promise.<TYPE.AssetItem> * [._getMainSubtype(extendedSubType)](#Asset._getMainSubtype) ⇒ string * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Asset.buildDefinitionForNested) ⇒ Promise.<void> @@ -931,7 +982,7 @@ This method retrieves these and saves them alongside the metadata json ### Asset.\_readExtendedFileFromFS(metadata, subType, deployDir, [pathOnly]) ⇒ Promise.<string> -helper for [preDeployTasks](preDeployTasks) +helper for [preDeployTasks](#Asset.preDeployTasks) Some metadata types store their actual content as a separate file, e.g. images This method reads these from the local FS stores them in the metadata object allowing to deploy it @@ -959,7 +1010,7 @@ manages post retrieve steps -### Asset.postDeployTasks(metadata, _, createdUpdated, [isRefresh]) ⇒ Promise.<void> +### Asset.postDeployTasks(metadata, _, createdUpdated) ⇒ Promise.<void> Gets executed after deployment of metadata type **Kind**: static method of [Asset](#Asset) @@ -970,7 +1021,6 @@ Gets executed after deployment of metadata type | metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | | _ | TYPE.MetadataTypeMap | originalMetadata to be updated (contains additioanl fields) | | createdUpdated | Object | counter representing successful creates/updates | -| [isRefresh] | boolean | optional flag to indicate that triggeredSend should be refreshed after deployment of assets | @@ -1078,7 +1128,7 @@ Asset-specific script that retrieves the folder ID from cache and updates the gi ### Asset.\_mergeCode(metadata, deployDir, subType, [templateName], [fileListOnly]) ⇒ Promise.<Array.<TYPE.CodeExtract>> -helper for [preDeployTasks](preDeployTasks) that loads extracted code content back into JSON +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON **Kind**: static method of [Asset](#Asset) **Returns**: Promise.<Array.<TYPE.CodeExtract>> - fileList for templating (disregarded during deployment) @@ -1094,7 +1144,7 @@ helper for [preDeployTasks](preDeployTasks) that loads extracted code content ba ### Asset.\_mergeCode\_slots(prefix, metadataSlots, readDirArr, subtypeExtension, subDirArr, fileList, customerKey, [templateName], [fileListOnly]) ⇒ Promise.<void> -helper for [preDeployTasks](preDeployTasks) that loads extracted code content back into JSON +helper for [preDeployTasks](#Asset.preDeployTasks) that loads extracted code content back into JSON **Kind**: static method of [Asset](#Asset) **Returns**: Promise.<void> - - @@ -1114,7 +1164,7 @@ helper for [preDeployTasks](preDeployTasks) that loads extracted code content ba ### Asset.\_extractCode(metadata) ⇒ TYPE.CodeExtractItem -helper for [postRetrieveTasks](postRetrieveTasks) that finds code content in JSON and extracts it +helper for [postRetrieveTasks](#Asset.postRetrieveTasks) that finds code content in JSON and extracts it to allow saving that separately and formatted **Kind**: static method of [Asset](#Asset) @@ -1201,6 +1251,7 @@ AttributeGroup MetadataType * [AttributeGroup](#AttributeGroup) ⇐ [MetadataType](#MetadataType) * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeGroup.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> * [.retrieveForCache()](#AttributeGroup.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.postRetrieveTasks(metadata)](#AttributeGroup.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem @@ -1224,6 +1275,87 @@ Retrieves Metadata of schema attribute groups for caching. **Kind**: static method of [AttributeGroup](#AttributeGroup) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of metadata + + +### AttributeGroup.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps + +**Kind**: static method of [AttributeGroup](#AttributeGroup) +**Returns**: TYPE.MetadataTypeItem - metadata + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single metadata | + + + +## AttributeSet ⇐ [MetadataType](#MetadataType) +AttributeSet MetadataType + +**Kind**: global class +**Extends**: [MetadataType](#MetadataType) + +* [AttributeSet](#AttributeSet) ⇐ [MetadataType](#MetadataType) + * [.retrieve(retrieveDir, [_], [__], [key])](#AttributeSet.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.retrieveForCache()](#AttributeSet.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.parseResponseBody(body, [singleRetrieve])](#AttributeSet.parseResponseBody) ⇒ TYPE.MetadataTypeMap + * [.postRetrieveTasks(metadata)](#AttributeSet.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem + * [._getSystemValueDefinitions()](#AttributeSet._getSystemValueDefinitions) ⇒ Array.<object> + + + +### AttributeSet.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema set Definitions. + +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + +| Param | Type | Description | +| --- | --- | --- | +| retrieveDir | string | Directory where retrieved metadata directory will be saved | +| [_] | void | unused parameter | +| [__] | void | unused parameter | +| [key] | string | customer key of single item to retrieve | + + + +### AttributeSet.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> +Retrieves Metadata of schema set definitions for caching. + +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise + + +### AttributeSet.parseResponseBody(body, [singleRetrieve]) ⇒ TYPE.MetadataTypeMap +Builds map of metadata entries mapped to their keyfields + +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: TYPE.MetadataTypeMap - keyField => metadata map + +| Param | Type | Description | +| --- | --- | --- | +| body | object | json of response body | +| [singleRetrieve] | string \| number | key of single item to filter by | + + + +### AttributeSet.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem +manages post retrieve steps + +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: TYPE.MetadataTypeItem - metadata + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single metadata | + + + +### AttributeSet.\_getSystemValueDefinitions() ⇒ Array.<object> +helper for [postRetrieveTasks](#AttributeSet.postRetrieveTasks) + +**Kind**: static method of [AttributeSet](#AttributeSet) +**Returns**: Array.<object> - all system value definitions ## Automation ⇐ [MetadataType](#MetadataType) @@ -1238,7 +1370,10 @@ Automation MetadataType * [.retrieveForCache()](#Automation.retrieveForCache) ⇒ Promise.<TYPE.AutomationMapObj> * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Automation.retrieveAsTemplate) ⇒ Promise.<TYPE.AutomationItemObj> * [.postRetrieveTasks(metadata)](#Automation.postRetrieveTasks) ⇒ TYPE.AutomationItem \| void - * [.deploy(metadata, targetBU, retrieveDir, [isRefresh])](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> + * [.execute(keyArr)](#Automation.execute) ⇒ Promise.<Array.<string>> + * [.getErrorsREST(ex)](#Automation.getErrorsREST) ⇒ Array.<string> \| void + * [.pause(keyArr)](#Automation.pause) ⇒ Promise.<Array.<string>> + * [.deploy(metadata, targetBU, retrieveDir)](#Automation.deploy) ⇒ Promise.<TYPE.AutomationMap> * [.create(metadata)](#Automation.create) ⇒ Promise * [.update(metadata, metadataBefore)](#Automation.update) ⇒ Promise * [.preDeployTasks(metadata)](#Automation.preDeployTasks) ⇒ Promise.<TYPE.AutomationItem> @@ -1308,9 +1443,45 @@ manages post retrieve steps | --- | --- | --- | | metadata | TYPE.AutomationItem | a single automation | + + +### Automation.execute(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + + + +### Automation.getErrorsREST(ex) ⇒ Array.<string> \| void +Standardizes a check for multiple messages but adds query specific filters to error texts + +**Kind**: static method of [Automation](#Automation) +**Returns**: Array.<string> \| void - formatted Error Message + +| Param | Type | Description | +| --- | --- | --- | +| ex | object | response payload from REST API | + + + +### Automation.pause(keyArr) ⇒ Promise.<Array.<string>> +a function to start query execution via API + +**Kind**: static method of [Automation](#Automation) +**Returns**: Promise.<Array.<string>> - Returns list of keys that were paused + +| Param | Type | Description | +| --- | --- | --- | +| keyArr | Array.<string> | customerkey of the metadata | + -### Automation.deploy(metadata, targetBU, retrieveDir, [isRefresh]) ⇒ Promise.<TYPE.AutomationMap> +### Automation.deploy(metadata, targetBU, retrieveDir) ⇒ Promise.<TYPE.AutomationMap> Deploys automation - the saved file is the original one due to large differences required for deployment **Kind**: static method of [Automation](#Automation) @@ -1321,7 +1492,6 @@ Deploys automation - the saved file is the original one due to large differences | metadata | TYPE.AutomationMap | metadata mapped by their keyField | | targetBU | string | name/shorthand of target businessUnit for mapping | | retrieveDir | string | directory where metadata after deploy should be saved | -| [isRefresh] | boolean | optional flag - so far not used by automation | @@ -1869,7 +2039,7 @@ Retrieves all records for caching ### DataExtensionField.convertToSortedArray(fieldsObj) ⇒ Array.<TYPE.DataExtensionFieldItem> -helper for [DataExtension._retrieveFieldsForSingleDe](DataExtension._retrieveFieldsForSingleDe) that sorts the fields into an array +helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array **Kind**: static method of [DataExtensionField](#DataExtensionField) **Returns**: Array.<TYPE.DataExtensionFieldItem> - sorted array of field objects @@ -2335,7 +2505,7 @@ Event MetadataType * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Event.retrieveAsTemplate) ⇒ Promise.<TYPE.MetadataTypeItemObj> * [.postRetrieveTasks(eventDef)](#Event.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem * [.deleteByKey(key)](#Event.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir, [isRefresh])](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.deploy(metadata, deployDir, retrieveDir)](#Event.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> * [.create(metadata)](#Event.create) ⇒ Promise * [.update(metadataEntry)](#Event.update) ⇒ Promise * [.preDeployTasks(metadata)](#Event.preDeployTasks) ⇒ TYPE.MetadataTypeItem @@ -2405,7 +2575,7 @@ Delete a metadata item from the specified business unit -### Event.deploy(metadata, deployDir, retrieveDir, [isRefresh]) ⇒ Promise.<TYPE.MetadataTypeMap> +### Event.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy **Kind**: static method of [Event](#Event) @@ -2416,7 +2586,6 @@ Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) | metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | | deployDir | string | directory where deploy metadata are saved | | retrieveDir | string | directory where metadata after deploy should be saved | -| [isRefresh] | boolean | optional flag - so far not used by eventDefinition | @@ -2747,10 +2916,10 @@ Returns file contents mapped to their filename without '.json' ending **Kind**: static method of [Folder](#Folder) **Returns**: TYPE.MetadataTypeMap - fileName => fileContent map -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| dir | string | | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | false | do not print errors, used for badKeys() | +| Param | Type | Description | +| --- | --- | --- | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | @@ -2923,7 +3092,7 @@ definitionId: A unique UUID provided by Salesforce Marketing Cloud. Each version * [Journey](#Journey) ⇐ [MetadataType](#MetadataType) * [.retrieve(retrieveDir, [_], [__], [key])](#Journey.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> * [.deleteByKey(key)](#Journey.deleteByKey) ⇒ Promise.<boolean> - * [.deploy(metadata, deployDir, retrieveDir, [isRefresh])](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.deploy(metadata, deployDir, retrieveDir)](#Journey.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> * [.update(metadata)](#Journey.update) ⇒ Promise * [.create(metadata)](#Journey.create) ⇒ Promise * [.saveResults(results, retrieveDir, [overrideType], [templateVariables])](#Journey.saveResults) ⇒ Promise.<TYPE.MetadataTypeMap> @@ -2961,7 +3130,7 @@ Delete a metadata item from the specified business unit -### Journey.deploy(metadata, deployDir, retrieveDir, [isRefresh]) ⇒ Promise.<TYPE.MetadataTypeMap> +### Journey.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) once per deploy **Kind**: static method of [Journey](#Journey) @@ -2972,7 +3141,6 @@ Deploys metadata - merely kept here to be able to print [logBeta](#Util.logBeta) | metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | | deployDir | string | directory where deploy metadata are saved | | retrieveDir | string | directory where metadata after deploy should be saved | -| [isRefresh] | boolean | optional flag - so far not used by interaction | @@ -3016,7 +3184,7 @@ Helper for writing Metadata to disk, used for Retrieve and deploy ### Journey.\_postRetrieveTasksBulk(metadataMap) -helper for Journey's [saveResults](saveResults). Gets executed after retreive of metadata type and +helper for Journey's [saveResults](#Journey.saveResults). Gets executed after retreive of metadata type and **Kind**: static method of [Journey](#Journey) @@ -3155,8 +3323,8 @@ Provides default functionality that can be overwritten by child metadata type cl * [.buObject](#MetadataType.buObject) : TYPE.BuObject * [.getJsonFromFS(dir, [listBadKeys])](#MetadataType.getJsonFromFS) ⇒ TYPE.MetadataTypeMap * [.getFieldNamesToRetrieve([additionalFields], [isCaching])](#MetadataType.getFieldNamesToRetrieve) ⇒ Array.<string> - * [.deploy(metadata, deployDir, retrieveDir, [isRefresh])](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> - * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated, [isRefresh])](#MetadataType.postDeployTasks) ⇒ void + * [.deploy(metadata, deployDir, retrieveDir)](#MetadataType.deploy) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.postDeployTasks(upsertResults, originalMetadata, createdUpdated)](#MetadataType.postDeployTasks) ⇒ void * [.postCreateTasks(metadataEntry, apiResponse)](#MetadataType.postCreateTasks) ⇒ void * [.postUpdateTasks(metadataEntry, apiResponse)](#MetadataType.postUpdateTasks) ⇒ void * [.postDeployTasks_legacyApi(metadataEntry, apiResponse)](#MetadataType.postDeployTasks_legacyApi) ⇒ Promise.<void> @@ -3174,9 +3342,10 @@ Provides default functionality that can be overwritten by child metadata type cl * [.update(metadata, [metadataBefore])](#MetadataType.update) ⇒ void * [.refresh()](#MetadataType.refresh) ⇒ void * [.execute()](#MetadataType.execute) ⇒ void + * [.pause()](#MetadataType.pause) ⇒ void * [.hasChanged(cachedVersion, metadata, [fieldName])](#MetadataType.hasChanged) ⇒ boolean * [.hasChangedGeneric(cachedVersion, metadata, [fieldName], [silent])](#MetadataType.hasChangedGeneric) ⇒ boolean - * [.upsert(metadataMap, deployDir, [isRefresh])](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> + * [.upsert(metadataMap, deployDir)](#MetadataType.upsert) ⇒ Promise.<TYPE.MetadataTypeMap> * [.createOrUpdate(metadataMap, metadataKey, hasError, metadataToUpdate, metadataToCreate)](#MetadataType.createOrUpdate) ⇒ 'create' \| 'update' \| 'skip' * [.createREST(metadataEntry, uri)](#MetadataType.createREST) ⇒ Promise.<object> \| null * [.createSOAP(metadataEntry, [handleOutside])](#MetadataType.createSOAP) ⇒ Promise.<object> \| null @@ -3186,7 +3355,8 @@ Provides default functionality that can be overwritten by child metadata type cl * [.getSOAPErrorMsg(ex)](#MetadataType.getSOAPErrorMsg) ⇒ string * [.retrieveSOAP(retrieveDir, [requestParams], [singleRetrieve], [additionalFields])](#MetadataType.retrieveSOAP) ⇒ Promise.<TYPE.MetadataTypeMapObj> * [.retrieveREST(retrieveDir, uri, [templateVariables], [singleRetrieve])](#MetadataType.retrieveREST) ⇒ Promise.<{metadata: (TYPE.MetadataTypeMap\|TYPE.MetadataTypeItem), type: string}> - * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<string> + * [.executeREST(uri, key)](#MetadataType.executeREST) ⇒ Promise.<{key:string, response:string}> + * [.executeSOAP([metadataEntry])](#MetadataType.executeSOAP) ⇒ Promise.<{key:string, response:object}> * [.runDocumentOnRetrieve([singleRetrieve], metadataMap)](#MetadataType.runDocumentOnRetrieve) ⇒ Promise.<void> * [.parseResponseBody(body, [singleRetrieve])](#MetadataType.parseResponseBody) ⇒ TYPE.MetadataTypeMap * [.deleteFieldByDefinition(metadataEntry, fieldPath, definitionProperty, origin)](#MetadataType.deleteFieldByDefinition) ⇒ void @@ -3204,7 +3374,7 @@ Provides default functionality that can be overwritten by child metadata type cl * [.findSubType(templateDir, templateName)](#MetadataType.findSubType) ⇒ Promise.<string> * [.readSecondaryFolder(templateDir, typeDirArr, templateName, fileName, ex)](#MetadataType.readSecondaryFolder) ⇒ object * [.buildDefinition(templateDir, targetDir, templateName, variables)](#MetadataType.buildDefinition) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.checkForErrors(ex)](#MetadataType.checkForErrors) ⇒ Array.<string> \| void + * [.getErrorsREST(ex)](#MetadataType.getErrorsREST) ⇒ Array.<string> \| void * [.document([metadata], [isDeploy])](#MetadataType.document) ⇒ void * [.deleteByKey(customerKey)](#MetadataType.deleteByKey) ⇒ boolean * [.postDeleteTasks(customerKey, [additionalExtensions])](#MetadataType.postDeleteTasks) ⇒ Promise.<void> @@ -3212,6 +3382,7 @@ Provides default functionality that can be overwritten by child metadata type cl * [.deleteByKeyREST(url, key, [handleOutside])](#MetadataType.deleteByKeyREST) ⇒ boolean * [.readBUMetadataForType(readDir, [listBadKeys], [buMetadata])](#MetadataType.readBUMetadataForType) ⇒ object * [.getFilesToCommit(keyArr)](#MetadataType.getFilesToCommit) ⇒ Promise.<Array.<string>> + * [.getKeysForFixing(metadataMap)](#MetadataType.getKeysForFixing) ⇒ Array.<string> @@ -3237,10 +3408,10 @@ Returns file contents mapped to their filename without '.json' ending **Kind**: static method of [MetadataType](#MetadataType) **Returns**: TYPE.MetadataTypeMap - fileName => fileContent map -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| dir | string | | directory that contains '.json' files to be read | -| [listBadKeys] | boolean | false | do not print errors, used for badKeys() | +| Param | Type | Description | +| --- | --- | --- | +| dir | string | directory that contains '.json' files to be read | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | @@ -3257,7 +3428,7 @@ Returns fieldnames of Metadata Type. 'this.definition.fields' variable only set -### MetadataType.deploy(metadata, deployDir, retrieveDir, [isRefresh]) ⇒ Promise.<TYPE.MetadataTypeMap> +### MetadataType.deploy(metadata, deployDir, retrieveDir) ⇒ Promise.<TYPE.MetadataTypeMap> Deploys metadata **Kind**: static method of [MetadataType](#MetadataType) @@ -3268,11 +3439,10 @@ Deploys metadata | metadata | TYPE.MetadataTypeMap | metadata mapped by their keyField | | deployDir | string | directory where deploy metadata are saved | | retrieveDir | string | directory where metadata after deploy should be saved | -| [isRefresh] | boolean | optional flag to indicate that triggeredSend should be refreshed after deployment of assets | -### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated, [isRefresh]) ⇒ void +### MetadataType.postDeployTasks(upsertResults, originalMetadata, createdUpdated) ⇒ void Gets executed after deployment of metadata type **Kind**: static method of [MetadataType](#MetadataType) @@ -3282,12 +3452,11 @@ Gets executed after deployment of metadata type | upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | | originalMetadata | TYPE.MetadataTypeMap | metadata to be updated (contains additioanl fields) | | createdUpdated | Object | counter representing successful creates/updates | -| [isRefresh] | boolean | optional flag to indicate that triggeredSend should be refreshed after deployment of assets | ### MetadataType.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](createREST) +helper for [createREST](#MetadataType.createREST) **Kind**: static method of [MetadataType](#MetadataType) @@ -3299,7 +3468,7 @@ helper for [createREST](createREST) ### MetadataType.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](updateREST) +helper for [updateREST](#MetadataType.updateREST) **Kind**: static method of [MetadataType](#MetadataType) @@ -3311,7 +3480,7 @@ helper for [updateREST](updateREST) ### MetadataType.postDeployTasks\_legacyApi(metadataEntry, apiResponse) ⇒ Promise.<void> -helper for [createREST](createREST) when legacy API endpoints as these do not return the created item but only their new id +helper for [createREST](#MetadataType.createREST) when legacy API endpoints as these do not return the created item but only their new id **Kind**: static method of [MetadataType](#MetadataType) **Returns**: Promise.<void> - - @@ -3492,6 +3661,12 @@ Abstract refresh method that needs to be implemented in child metadata type ### MetadataType.execute() ⇒ void Abstract execute method that needs to be implemented in child metadata type +**Kind**: static method of [MetadataType](#MetadataType) + + +### MetadataType.pause() ⇒ void +Abstract pause method that needs to be implemented in child metadata type + **Kind**: static method of [MetadataType](#MetadataType) @@ -3524,7 +3699,7 @@ test if metadata was actually changed or not to potentially skip it during deplo -### MetadataType.upsert(metadataMap, deployDir, [isRefresh]) ⇒ Promise.<TYPE.MetadataTypeMap> +### MetadataType.upsert(metadataMap, deployDir) ⇒ Promise.<TYPE.MetadataTypeMap> MetadataType upsert, after retrieving from target and comparing to check if create or update operation is needed. **Kind**: static method of [MetadataType](#MetadataType) @@ -3534,7 +3709,6 @@ MetadataType upsert, after retrieving from target and comparing to check if crea | --- | --- | --- | | metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | | deployDir | string | directory where deploy metadata are saved | -| [isRefresh] | boolean | optional flag to indicate that triggeredSend should be refreshed after deployment of assets | @@ -3590,7 +3764,7 @@ Updates a single metadata entry via REST | --- | --- | --- | --- | | metadataEntry | TYPE.MetadataTypeItem | | a single metadata Entry | | uri | string | | rest endpoint for PATCH | -| [httpMethod] | 'patch' \| 'post' \| 'put' | 'patch' | defaults to 'patch'; some update requests require PUT instead of PATCH | +| [httpMethod] | 'patch' \| 'post' \| 'put' | patch | defaults to 'patch'; some update requests require PUT instead of PATCH | @@ -3620,7 +3794,7 @@ Updates a single metadata entry via fuel-soap (generic lib not wrapper) ### MetadataType.getSOAPErrorMsg(ex) ⇒ string -helper for [_handleSOAPErrors](_handleSOAPErrors) +helper for [_handleSOAPErrors](#MetadataType._handleSOAPErrors) **Kind**: static method of [MetadataType](#MetadataType) **Returns**: string - error message @@ -3661,21 +3835,33 @@ Retrieves Metadata for Rest Types -### MetadataType.executeREST(uri, key) ⇒ Promise.<string> +### MetadataType.executeREST(uri, key) ⇒ Promise.<{key:string, response:string}> Used to execute a query/automation etc. **Kind**: static method of [MetadataType](#MetadataType) -**Returns**: Promise.<string> - 'OK' if started execution successfully, otherwise - 'Error' +**Returns**: Promise.<{key:string, response:string}> - metadata key and API response (OK or error) | Param | Type | Description | | --- | --- | --- | | uri | string | REST endpoint where the POST request should be sent | | key | string | item key | + + +### MetadataType.executeSOAP([metadataEntry]) ⇒ Promise.<{key:string, response:object}> +Used to execute a query/automation etc. + +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response + +| Param | Type | Description | +| --- | --- | --- | +| [metadataEntry] | TYPE.MetadataTypeItem | single metadata entry | + ### MetadataType.runDocumentOnRetrieve([singleRetrieve], metadataMap) ⇒ Promise.<void> -helper for [retrieveREST](retrieveREST) and [retrieveSOAP](retrieveSOAP) +helper for [retrieveREST](#MetadataType.retrieveREST) and [retrieveSOAP](#MetadataType.retrieveSOAP) **Kind**: static method of [MetadataType](#MetadataType) **Returns**: Promise.<void> - - @@ -3769,10 +3955,10 @@ checks if the current metadata entry should be saved on retrieve or not **Kind**: static method of [MetadataType](#MetadataType) **Returns**: boolean - true: skip saving == filtered; false: continue with saving -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadataEntry | TYPE.MetadataTypeItem | | metadata entry | -| [include] | boolean | false | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.MetadataTypeItem | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | @@ -3782,10 +3968,10 @@ optionally filter by what folder something is in **Kind**: static method of [MetadataType](#MetadataType) **Returns**: boolean - true: filtered == do NOT save; false: not filtered == do save -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| metadataEntry | object | | metadata entry | -| [include] | boolean | false | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | object | metadata entry | +| [include] | boolean | true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude | @@ -3805,7 +3991,7 @@ Helper for writing Metadata to disk, used for Retrieve and deploy ### MetadataType.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](buildDefinitionForNested) +helper for [buildDefinitionForNested](#MetadataType.buildDefinitionForNested) searches extracted file for template variable names and applies the market values **Kind**: static method of [MetadataType](#MetadataType) @@ -3819,7 +4005,7 @@ searches extracted file for template variable names and applies the market value ### MetadataType.applyTemplateNames(code, templateVariables) ⇒ string -helper for [buildTemplateForNested](buildTemplateForNested) +helper for [buildTemplateForNested](#MetadataType.buildTemplateForNested) searches extracted file for template variable values and applies the market variable names **Kind**: static method of [MetadataType](#MetadataType) @@ -3833,7 +4019,7 @@ searches extracted file for template variable values and applies the market vari ### MetadataType.buildDefinitionForNested(templateDir, targetDir, metadata, variables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](buildDefinition) +helper for [buildDefinition](#MetadataType.buildDefinition) handles extracted code if any are found for complex types (e.g script, asset, query) **Kind**: static method of [MetadataType](#MetadataType) @@ -3850,7 +4036,7 @@ handles extracted code if any are found for complex types (e.g script, asset, qu ### MetadataType.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](buildTemplate) +helper for [buildTemplate](#MetadataType.buildTemplate) handles extracted code if any are found for complex types **Kind**: static method of [MetadataType](#MetadataType) @@ -3910,9 +4096,9 @@ parsing is required (for example scripts & queries) | templateName | string | name of the metadata file | | variables | TYPE.TemplateMap | variables to be replaced in the metadata | - + -### MetadataType.checkForErrors(ex) ⇒ Array.<string> \| void +### MetadataType.getErrorsREST(ex) ⇒ Array.<string> \| void Standardizes a check for multiple messages **Kind**: static method of [MetadataType](#MetadataType) @@ -3995,11 +4181,11 @@ Returns metadata of a business unit that is saved locally **Kind**: static method of [MetadataType](#MetadataType) **Returns**: object - Metadata of BU in local directory -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| readDir | string | | root directory of metadata. | -| [listBadKeys] | boolean | false | do not print errors, used for badKeys() | -| [buMetadata] | object | | Metadata of BU in local directory | +| Param | Type | Description | +| --- | --- | --- | +| readDir | string | root directory of metadata. | +| [listBadKeys] | boolean | do not print errors, used for badKeys() | +| [buMetadata] | object | Metadata of BU in local directory | @@ -4014,6 +4200,16 @@ additionally, the documentation for dataExtension and automation should be retur | --- | --- | --- | | keyArr | Array.<string> | customerkey of the metadata | + + +### MetadataType.getKeysForFixing(metadataMap) ⇒ Array.<string> +**Kind**: static method of [MetadataType](#MetadataType) +**Returns**: Array.<string> - list of keys + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.MetadataTypeMap | metadata mapped by their keyField | + ## MobileCode ⇐ [MetadataType](#MetadataType) @@ -4190,7 +4386,7 @@ manages post retrieve steps ### MobileKeyword.prepExtractedCode(metadataScript) ⇒ Object -helper for [parseMetadata](parseMetadata) and [_buildForNested](_buildForNested) +helper for [postRetrieveTasks](#MobileKeyword.postRetrieveTasks) and [_buildForNested](#MobileKeyword._buildForNested) **Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Object - returns found extension and file content @@ -4240,7 +4436,7 @@ scripts are saved as 1 json and 1 ssjs file. both files need to be run through t ### MobileKeyword.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](buildTemplateForNested) / [buildDefinitionForNested](buildDefinitionForNested) +helper for [buildTemplateForNested](#MobileKeyword.buildTemplateForNested) / [buildDefinitionForNested](#MobileKeyword.buildDefinitionForNested) handles extracted code if any are found for complex types **Kind**: static method of [MobileKeyword](#MobileKeyword) @@ -4271,7 +4467,7 @@ prepares an event definition for deployment ### MobileKeyword.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](createREST) +helper for [createREST](#MetadataType.createREST) **Kind**: static method of [MobileKeyword](#MobileKeyword) @@ -4283,7 +4479,7 @@ helper for [createREST](createREST) ### MobileKeyword.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](updateREST) +helper for [updateREST](#MetadataType.updateREST) **Kind**: static method of [MobileKeyword](#MobileKeyword) @@ -4295,7 +4491,7 @@ helper for [updateREST](updateREST) ### MobileKeyword.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](preDeployTasks) that loads extracted code content back into JSON +helper for [preDeployTasks](#MobileKeyword.preDeployTasks) that loads extracted code content back into JSON **Kind**: static method of [MobileKeyword](#MobileKeyword) **Returns**: Promise.<string> - content for metadata.script @@ -4423,7 +4619,7 @@ Creates a single item ### MobileMessage.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](preDeployTasks) that loads extracted code content back into JSON +helper for [preDeployTasks](#MobileMessage.preDeployTasks) that loads extracted code content back into JSON **Kind**: static method of [MobileMessage](#MobileMessage) **Returns**: Promise.<string> - code @@ -4437,7 +4633,7 @@ helper for [preDeployTasks](preDeployTasks) that loads extracted code content ba ### MobileMessage.prepExtractedCode(code) ⇒ Object -helper for [parseMetadata](parseMetadata) and [_buildForNested](_buildForNested) +helper for [postRetrieveTasks](#MobileMessage.postRetrieveTasks) and [_buildForNested](#MobileMessage._buildForNested) **Kind**: static method of [MobileMessage](#MobileMessage) **Returns**: Object - returns found extension and file content @@ -4487,7 +4683,7 @@ prepares an event definition for deployment ### MobileMessage.postCreateTasks(metadataEntry, apiResponse) ⇒ void -helper for [createREST](createREST) +helper for [createREST](#MetadataType.createREST) **Kind**: static method of [MobileMessage](#MobileMessage) @@ -4499,7 +4695,7 @@ helper for [createREST](createREST) ### MobileMessage.postUpdateTasks(metadataEntry, apiResponse) ⇒ void -helper for [updateREST](updateREST) +helper for [updateREST](#MetadataType.updateREST) **Kind**: static method of [MobileMessage](#MobileMessage) @@ -4549,7 +4745,7 @@ scripts are saved as 1 json and 1 ssjs file. both files need to be run through t ### MobileMessage.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](buildTemplateForNested) / [buildDefinitionForNested](buildDefinitionForNested) +helper for [buildTemplateForNested](#MobileMessage.buildTemplateForNested) / [buildDefinitionForNested](#MobileMessage.buildDefinitionForNested) handles extracted code if any are found for complex types **Kind**: static method of [MobileMessage](#MobileMessage) @@ -4587,7 +4783,7 @@ Query MetadataType * [Query](#Query) ⇐ [MetadataType](#MetadataType) * [.retrieve(retrieveDir, [_], [__], [key])](#Query.retrieve) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> - * [.execute(keyArr)](#Query.execute) ⇒ Promise.<boolean> + * [.execute(keyArr)](#Query.execute) ⇒ Promise.<Array.<string>> * [.retrieveForCache()](#Query.retrieveForCache) ⇒ Promise.<{metadata: TYPE.QueryMap, type: string}> * [.retrieveAsTemplate(templateDir, name, templateVariables)](#Query.retrieveAsTemplate) ⇒ Promise.<{metadata: Query, type: string}> * [.postRetrieveTasks(metadata)](#Query.postRetrieveTasks) ⇒ TYPE.CodeExtractItem @@ -4598,9 +4794,10 @@ Query MetadataType * [.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildDefinitionForNested) ⇒ Promise.<Array.<Array.<string>>> * [.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName)](#Query.buildTemplateForNested) ⇒ Promise.<Array.<Array.<string>>> * [.getFilesToCommit(keyArr)](#Query.getFilesToCommit) ⇒ Array.<string> - * [.checkForErrors(ex)](#Query.checkForErrors) ⇒ Array.<string> \| void + * [.getErrorsREST(ex)](#Query.getErrorsREST) ⇒ Array.<string> \| void * [.deleteByKey(customerKey)](#Query.deleteByKey) ⇒ boolean * [.postDeleteTasks(customerKey)](#Query.postDeleteTasks) ⇒ void + * [.postDeployTasks(upsertResults)](#Query.postDeployTasks) @@ -4619,11 +4816,11 @@ Retrieves Metadata of queries -### Query.execute(keyArr) ⇒ Promise.<boolean> +### Query.execute(keyArr) ⇒ Promise.<Array.<string>> a function to start query execution via API **Kind**: static method of [Query](#Query) -**Returns**: Promise.<boolean> - Returns true if all items were executed successfully, otherwise false +**Returns**: Promise.<Array.<string>> - Returns list of keys that were executed successfully | Param | Type | Description | | --- | --- | --- | @@ -4702,7 +4899,7 @@ prepares a Query for deployment ### Query.applyTemplateValues(code, templateVariables) ⇒ string -helper for [buildDefinitionForNested](buildDefinitionForNested) +helper for [buildDefinitionForNested](#Query.buildDefinitionForNested) searches extracted SQL file for template variables and applies the market values **Kind**: static method of [Query](#Query) @@ -4764,9 +4961,9 @@ additionally, the documentation for dataExtension and automation should be retur | --- | --- | --- | | keyArr | Array.<string> | customerkey of the metadata | - + -### Query.checkForErrors(ex) ⇒ Array.<string> \| void +### Query.getErrorsREST(ex) ⇒ Array.<string> \| void Standardizes a check for multiple messages but adds query specific filters to error texts **Kind**: static method of [Query](#Query) @@ -4799,6 +4996,17 @@ clean up after deleting a metadata item | --- | --- | --- | | customerKey | string | Identifier of metadata item | + + +### Query.postDeployTasks(upsertResults) +Gets executed after deployment of metadata type + +**Kind**: static method of [Query](#Query) + +| Param | Type | Description | +| --- | --- | --- | +| upsertResults | TYPE.MetadataTypeMap | metadata mapped by their keyField as returned by update/create | + ## Role ⇐ [MetadataType](#MetadataType) @@ -4992,7 +5200,7 @@ Creates a single Script ### Script.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](preDeployTasks) that loads extracted code content back into JSON +helper for [preDeployTasks](#Script.preDeployTasks) that loads extracted code content back into JSON **Kind**: static method of [Script](#Script) **Returns**: Promise.<string> - content for metadata.script @@ -5057,7 +5265,7 @@ scripts are saved as 1 json and 1 ssjs file. both files need to be run through t ### Script.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](buildTemplateForNested) / [buildDefinitionForNested](buildDefinitionForNested) +helper for [buildTemplateForNested](#Script.buildTemplateForNested) / [buildDefinitionForNested](#Script.buildDefinitionForNested) handles extracted code if any are found for complex types **Kind**: static method of [Script](#Script) @@ -5087,7 +5295,7 @@ Splits the script metadata into two parts and parses in a standard manner ### Script.prepExtractedCode(metadataScript, metadataName) ⇒ Object -helper for [parseMetadata](parseMetadata) and [_buildForNested](_buildForNested) +helper for [parseMetadata](#Script.parseMetadata) and [_buildForNested](#Script._buildForNested) **Kind**: static method of [Script](#Script) **Returns**: Object - returns found extension and file content @@ -5132,40 +5340,6 @@ Retrieves SOAP based metadata of metadata type into local filesystem. executes c | [__] | void | unused parameter | | [key] | string | customer key of single item to retrieve | - - -## SetDefinition ⇐ [MetadataType](#MetadataType) -SetDefinition MetadataType - -**Kind**: global class -**Extends**: [MetadataType](#MetadataType) - -* [SetDefinition](#SetDefinition) ⇐ [MetadataType](#MetadataType) - * [.retrieve(retrieveDir, [_], [__], [key])](#SetDefinition.retrieve) ⇒ Promise.<TYPE.MetadataTypeMapObj> - * [.retrieveForCache()](#SetDefinition.retrieveForCache) ⇒ Promise.<TYPE.MetadataTypeMapObj> - - - -### SetDefinition.retrieve(retrieveDir, [_], [__], [key]) ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set Definitions. - -**Kind**: static method of [SetDefinition](#SetDefinition) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise - -| Param | Type | Description | -| --- | --- | --- | -| retrieveDir | string | Directory where retrieved metadata directory will be saved | -| [_] | void | unused parameter | -| [__] | void | unused parameter | -| [key] | string | customer key of single item to retrieve | - - - -### SetDefinition.retrieveForCache() ⇒ Promise.<TYPE.MetadataTypeMapObj> -Retrieves Metadata of schema set definitions for caching. - -**Kind**: static method of [SetDefinition](#SetDefinition) -**Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise ## TransactionalEmail ⇐ [TransactionalMessage](#TransactionalMessage) @@ -5371,7 +5545,7 @@ prepares for deployment ### TransactionalSMS.\_mergeCode(metadata, deployDir, [templateName]) ⇒ Promise.<string> -helper for [preDeployTasks](preDeployTasks) that loads extracted code content back into JSON +helper for [preDeployTasks](#TransactionalSMS.preDeployTasks) that loads extracted code content back into JSON **Kind**: static method of [TransactionalSMS](#TransactionalSMS) **Returns**: Promise.<string> - content for metadata.script @@ -5397,7 +5571,7 @@ manages post retrieve steps ### TransactionalSMS.prepExtractedCode(metadataScript) ⇒ Object -helper for [parseMetadata](parseMetadata) and [_buildForNested](_buildForNested) +helper for [postRetrieveTasks](#TransactionalSMS.postRetrieveTasks) and [_buildForNested](#TransactionalSMS._buildForNested) **Kind**: static method of [TransactionalSMS](#TransactionalSMS) **Returns**: Object - returns found extension and file content @@ -5409,7 +5583,7 @@ helper for [parseMetadata](parseMetadata) and [_buildForNested](_buildForNested) ### TransactionalSMS.buildDefinitionForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildDefinition](#MetadataType.buildDefinition) +helper for [TransactionalMessage.buildDefinition](TransactionalMessage.buildDefinition) handles extracted code if any are found for complex types **Kind**: static method of [TransactionalSMS](#TransactionalSMS) @@ -5426,7 +5600,7 @@ handles extracted code if any are found for complex types ### TransactionalSMS.buildTemplateForNested(templateDir, targetDir, metadata, templateVariables, templateName) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplate](#MetadataType.buildTemplate) +helper for [TransactionalMessage.buildTemplate](TransactionalMessage.buildTemplate) handles extracted code if any are found for complex types **Kind**: static method of [TransactionalSMS](#TransactionalSMS) @@ -5447,7 +5621,7 @@ scripts are saved as 1 json and 1 ssjs file. both files need to be run through t ### TransactionalSMS.\_buildForNested(templateDir, targetDir, metadata, templateVariables, templateName, mode) ⇒ Promise.<Array.<Array.<string>>> -helper for [buildTemplateForNested](buildTemplateForNested) / [buildDefinitionForNested](buildDefinitionForNested) +helper for [buildTemplateForNested](#TransactionalSMS.buildTemplateForNested) / [buildDefinitionForNested](#TransactionalSMS.buildDefinitionForNested) handles extracted code if any are found for complex types **Kind**: static method of [TransactionalSMS](#TransactionalSMS) @@ -5500,13 +5674,11 @@ MessageSendActivity MetadataType * [.create(metadata)](#TriggeredSend.create) ⇒ Promise * [.update(metadata)](#TriggeredSend.update) ⇒ Promise * [.deleteByKey(customerKey)](#TriggeredSend.deleteByKey) ⇒ Promise.<boolean> - * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem - * [.setFolderPath(metadata)](#TriggeredSend.setFolderPath) - * [.parseMetadata(metadata)](#TriggeredSend.parseMetadata) ⇒ TYPE.MetadataTypeItem \| void + * [.postRetrieveTasks(metadata)](#TriggeredSend.postRetrieveTasks) ⇒ TYPE.MetadataTypeItem \| void * [.preDeployTasks(metadata)](#TriggeredSend.preDeployTasks) ⇒ TYPE.MetadataTypeItem * [.refresh([keyArr], [checkKey])](#TriggeredSend.refresh) ⇒ Promise.<void> * [.getKeysForValidTSDs(metadata)](#TriggeredSend.getKeysForValidTSDs) ⇒ Promise.<Array.<string>> - * [.findRefreshableItems()](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> + * [.findRefreshableItems([assetLoaded])](#TriggeredSend.findRefreshableItems) ⇒ Promise.<TYPE.MetadataTypeMapObj> * [._refreshItem(key, checkKey)](#TriggeredSend._refreshItem) ⇒ Promise.<boolean> @@ -5562,30 +5734,7 @@ Delete a metadata item from the specified business unit -### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem -manages post retrieve steps - -**Kind**: static method of [TriggeredSend](#TriggeredSend) -**Returns**: TYPE.MetadataTypeItem - Array with one metadata object and one query string - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query | - - - -### TriggeredSend.setFolderPath(metadata) -generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - -**Kind**: static method of [TriggeredSend](#TriggeredSend) - -| Param | Type | Description | -| --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single script activity definition | - - - -### TriggeredSend.parseMetadata(metadata) ⇒ TYPE.MetadataTypeItem \| void +### TriggeredSend.postRetrieveTasks(metadata) ⇒ TYPE.MetadataTypeItem \| void parses retrieved Metadata before saving **Kind**: static method of [TriggeredSend](#TriggeredSend) @@ -5593,7 +5742,7 @@ parses retrieved Metadata before saving | Param | Type | Description | | --- | --- | --- | -| metadata | TYPE.MetadataTypeItem | a single query activity definition | +| metadata | TYPE.MetadataTypeItem | a single item | @@ -5623,7 +5772,7 @@ TSD-specific refresh method that finds active TSDs and refreshes them ### TriggeredSend.getKeysForValidTSDs(metadata) ⇒ Promise.<Array.<string>> -helper for [refresh](refresh) that extracts the keys from the TSD item map and eli +helper for [refresh](#TriggeredSend.refresh) that extracts the keys from the TSD item map and eli **Kind**: static method of [TriggeredSend](#TriggeredSend) **Returns**: Promise.<Array.<string>> - keyArr @@ -5634,15 +5783,20 @@ helper for [refresh](refresh) that extracts the keys from the TSD item map and e -### TriggeredSend.findRefreshableItems() ⇒ Promise.<TYPE.MetadataTypeMapObj> -helper for [refresh](refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](retrieve) is using to avoid refreshing TSDs with broken dependencies +### TriggeredSend.findRefreshableItems([assetLoaded]) ⇒ Promise.<TYPE.MetadataTypeMapObj> +helper for [refresh](#TriggeredSend.refresh) that finds active TSDs on the server and filters it by the same rules that [retrieve](#TriggeredSend.retrieve) is using to avoid refreshing TSDs with broken dependencies **Kind**: static method of [TriggeredSend](#TriggeredSend) **Returns**: Promise.<TYPE.MetadataTypeMapObj> - Promise of TSD item map + +| Param | Type | Default | Description | +| --- | --- | --- | --- | +| [assetLoaded] | boolean | false | if run after Asset.deploy via --refresh option this will skip caching assets | + ### TriggeredSend.\_refreshItem(key, checkKey) ⇒ Promise.<boolean> -helper for [refresh](refresh) that pauses, publishes and starts a triggered send +helper for [refresh](#TriggeredSend.refresh) that pauses, publishes and starts a triggered send **Kind**: static method of [TriggeredSend](#TriggeredSend) **Returns**: Promise.<boolean> - true if refresh was successful @@ -5862,7 +6016,7 @@ Retrieve metadata of specified types into local file system and Retriever.metada ### retriever.\_getTypeDependencies(metadataTypes) ⇒ Array.<TYPE.SupportedMetadataTypes> -helper for [retrieve](retrieve) to get all dependencies of the given types +helper for [Retriever.retrieve](Retriever.retrieve) to get all dependencies of the given types **Kind**: instance method of [Retriever](#Retriever) **Returns**: Array.<TYPE.SupportedMetadataTypes> - unique list dependent metadata types @@ -5897,6 +6051,7 @@ CLI entry for SFMC DevTools * [.metadataLogger(level, type, method, payload, [source])](#Util.metadataLogger) ⇒ void * [.replaceByObject(str, obj)](#Util.replaceByObject) ⇒ string \| object * [.inverseGet(objs, val)](#Util.inverseGet) ⇒ string + * [.getDependentMetadata(fixedType)](#Util.getDependentMetadata) ⇒ Array.<string> * [.getMetadataHierachy(metadataTypes)](#Util.getMetadataHierachy) ⇒ Object.<string, Array.<string>> * [.resolveObjPath(path, obj)](#Util.resolveObjPath) ⇒ any * [.execSync(cmd, [args], [hideOutput])](#Util.execSync) ⇒ string \| void @@ -5908,6 +6063,9 @@ CLI entry for SFMC DevTools * [.getKeysString(keyArr, [isId])](#Util.getKeysString) ⇒ string * [.sleep(ms)](#Util.sleep) ⇒ Promise.<void> * [.getSsjs(code)](#Util.getSsjs) ⇒ string + * [.stringLike(testString, search)](#Util.stringLike) ⇒ boolean + * [.fieldsLike(metadata, [filters])](#Util.fieldsLike) ⇒ boolean + * [.capitalizeFirstLetter(str)](#Util.capitalizeFirstLetter) ⇒ string @@ -5992,7 +6150,8 @@ used to ensure the program tells surrounding software that an unrecoverable erro ### Util.isTrue(attrValue) ⇒ boolean -SFMC accepts multiple true values for Boolean attributes for which we are checking here +SFMC accepts multiple true values for Boolean attributes for which we are checking here. +The same problem occurs when evaluating boolean CLI flags **Kind**: static method of [Util](#Util) **Returns**: boolean - attribute value == true ? true : false @@ -6004,7 +6163,8 @@ SFMC accepts multiple true values for Boolean attributes for which we are checki ### Util.isFalse(attrValue) ⇒ boolean -SFMC accepts multiple false values for Boolean attributes for which we are checking here +SFMC accepts multiple false values for Boolean attributes for which we are checking here. +The same problem occurs when evaluating boolean CLI flags **Kind**: static method of [Util](#Util) **Returns**: boolean - attribute value == false ? true : false @@ -6016,7 +6176,7 @@ SFMC accepts multiple false values for Boolean attributes for which we are check ### Util.\_isValidType(selectedType, [handleOutside]) ⇒ boolean -helper for [retrieve](#Mcdev.retrieve), [retrieveAsTemplate](#Mcdev.retrieveAsTemplate) and [deploy](#Mcdev.deploy) +helper for Mcdev.retrieve, Mcdev.retrieveAsTemplate and Mcdev.deploy **Kind**: static method of [Util](#Util) **Returns**: boolean - type ok or not @@ -6053,9 +6213,9 @@ wrapper around our standard winston logging to console and logfile **Kind**: static method of [Util](#Util) **Returns**: object - initiated logger for console and file -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [noLogFile] | boolean | false | optional flag to indicate if we should log to file; CLI logs are always on | +| Param | Type | Description | +| --- | --- | --- | +| [noLogFile] | boolean | optional flag to indicate if we should log to file; CLI logs are always on | @@ -6064,10 +6224,10 @@ initiate winston logger **Kind**: static method of [Util](#Util) -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [restart] | boolean | false | if true, logger will be restarted; otherwise, an existing logger will be used | -| [noLogFile] | boolean | false | if false, logger will log to file; otherwise, only to console | +| Param | Type | Description | +| --- | --- | --- | +| [restart] | boolean | if true, logger will be restarted; otherwise, an existing logger will be used | +| [noLogFile] | boolean | if false, logger will log to file; otherwise, only to console | @@ -6111,6 +6271,18 @@ get key of an object based on the first matching value | objs | object | object of objects to be searched | | val | string | value to be searched for | + + +### Util.getDependentMetadata(fixedType) ⇒ Array.<string> +helper for Mcdev.fixKeys. Retrieve dependent metadata + +**Kind**: static method of [Util](#Util) +**Returns**: Array.<string> - array of types that depend on the given type + +| Param | Type | Description | +| --- | --- | --- | +| fixedType | string | type of the metadata passed as a parameter to fixKeys function | + ### Util.getMetadataHierachy(metadataTypes) ⇒ Object.<string, Array.<string>> @@ -6240,7 +6412,7 @@ pause execution of code; useful when multiple server calls are dependent on each ### Util.getSsjs(code) ⇒ string -helper for [_extractCode](#Asset._extractCode) and [prepExtractedCode](#Script.prepExtractedCode) to determine if a code block is a valid SSJS block +helper for Asset.extractCode and Script.prepExtractedCode to determine if a code block is a valid SSJS block **Kind**: static method of [Util](#Util) **Returns**: string - the SSJS code if code block is a valid SSJS block, otherwise null @@ -6264,6 +6436,44 @@ the following is invalid: // 3 ``` + + +### Util.stringLike(testString, search) ⇒ boolean +allows us to filter just like with SQL's LIKE operator + +**Kind**: static method of [Util](#Util) +**Returns**: boolean - true if testString matches search + +| Param | Type | Description | +| --- | --- | --- | +| testString | string | field value to test | +| search | string | search string in SQL LIKE format | + + + +### Util.fieldsLike(metadata, [filters]) ⇒ boolean +returns true if no LIKE filter is defined or if all filters match + +**Kind**: static method of [Util](#Util) +**Returns**: boolean - true if no LIKE filter is defined or if all filters match + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single metadata item | +| [filters] | object | only used in recursive calls | + + + +### Util.capitalizeFirstLetter(str) ⇒ string +helper used by SOAP methods to ensure the type always uses an upper-cased first letter + +**Kind**: static method of [Util](#Util) +**Returns**: string - str with first letter capitalized + +| Param | Type | Description | +| --- | --- | --- | +| str | string | string to capitalize | + ## MetadataTypeDefinitions @@ -6327,6 +6537,7 @@ CLI helper class * [Cli](#Cli) * [.initMcdevConfig()](#Cli.initMcdevConfig) ⇒ Promise.<boolean> * [.addExtraCredential(properties)](#Cli.addExtraCredential) ⇒ Promise.<(boolean\|string)> + * [.postFixKeysReretrieve(type, dependentTypes)](#Cli.postFixKeysReretrieve) ⇒ Promise.<boolean> * [.logExistingCredentials(properties)](#Cli.logExistingCredentials) ⇒ void * [.updateCredential(properties, credName)](#Cli.updateCredential) ⇒ Promise.<boolean> * [.getCredentialObject(properties, target, [isCredentialOnly], [allowAll])](#Cli.getCredentialObject) ⇒ Promise.<TYPE.BuObject> @@ -6357,6 +6568,17 @@ Extends template file for properties.json | --- | --- | --- | | properties | TYPE.Mcdevrc | config file's json | + + +### Cli.postFixKeysReretrieve(type, dependentTypes) ⇒ Promise.<boolean> +**Kind**: static method of [Cli](#Cli) +**Returns**: Promise.<boolean> - true if user wants to continue with retrieve + +| Param | Type | Description | +| --- | --- | --- | +| type | TYPE.SupportedMetadataTypes | limit execution to given metadata type | +| dependentTypes | Array.<TYPE.SupportedMetadataTypes> | types that depent on type | + ### Cli.logExistingCredentials(properties) ⇒ void @@ -6801,12 +7023,12 @@ reads file from local file system. **Kind**: static method of [File](#File) **Returns**: Promise.<string> \| void - file contents; void on error -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| directory | string \| Array.<string> | | directory where the file is stored | -| filename | string | | name of the file without '.json' ending | -| filetype | string | | filetype suffix | -| [encoding] | string | "'utf8'" | read file with encoding (defaults to utf-8) | +| Param | Type | Description | +| --- | --- | --- | +| directory | string \| Array.<string> | directory where the file is stored | +| filename | string | name of the file without '.json' ending | +| filetype | string | filetype suffix | +| [encoding] | string | read file with encoding (defaults to utf-8) | @@ -6869,9 +7091,9 @@ Initalises Prettier formatting lib async. **Kind**: static method of [File](#File) **Returns**: Promise.<boolean> - success of config load -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [filetype] | string | "'html'" | filetype ie. JSON or SSJS | +| Param | Type | Description | +| --- | --- | --- | +| [filetype] | string | filetype ie. JSON or SSJS | @@ -6897,7 +7119,6 @@ CLI helper class * [._initMarkets()](#Init._initMarkets) * [._downloadAllBUs(bu, gitStatus)](#Init._downloadAllBUs) ⇒ Promise.<void> * [.upgradeProject(properties, [initial], [repoName])](#Init.upgradeProject) ⇒ Promise.<boolean> - * [._getMissingCredentials(properties)](#Init._getMissingCredentials) ⇒ Array.<string> * [.installDependencies([repoName])](#Init.installDependencies) ⇒ Promise.<boolean> * [._getDefaultPackageJson([currentContent])](#Init._getDefaultPackageJson) ⇒ Promise.<{script: object, author: string, license: string}> @@ -7057,18 +7278,6 @@ wrapper around npm dependency & configuration file setup | [initial] | boolean | print message if not part of initial setup | | [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - -### Init.\_getMissingCredentials(properties) ⇒ Array.<string> -finds credentials that are set up in config but not in auth file - -**Kind**: static method of [Init](#Init) -**Returns**: Array.<string> - list of credential names - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | javascript object in .mcdevrc.json | - ### Init.installDependencies([repoName]) ⇒ Promise.<boolean> @@ -7119,7 +7328,6 @@ CLI helper class * [._initMarkets()](#Init._initMarkets) * [._downloadAllBUs(bu, gitStatus)](#Init._downloadAllBUs) ⇒ Promise.<void> * [.upgradeProject(properties, [initial], [repoName])](#Init.upgradeProject) ⇒ Promise.<boolean> - * [._getMissingCredentials(properties)](#Init._getMissingCredentials) ⇒ Array.<string> * [.installDependencies([repoName])](#Init.installDependencies) ⇒ Promise.<boolean> * [._getDefaultPackageJson([currentContent])](#Init._getDefaultPackageJson) ⇒ Promise.<{script: object, author: string, license: string}> @@ -7279,18 +7487,6 @@ wrapper around npm dependency & configuration file setup | [initial] | boolean | print message if not part of initial setup | | [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - -### Init.\_getMissingCredentials(properties) ⇒ Array.<string> -finds credentials that are set up in config but not in auth file - -**Kind**: static method of [Init](#Init) -**Returns**: Array.<string> - list of credential names - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | javascript object in .mcdevrc.json | - ### Init.installDependencies([repoName]) ⇒ Promise.<boolean> @@ -7341,7 +7537,6 @@ CLI helper class * [._initMarkets()](#Init._initMarkets) * [._downloadAllBUs(bu, gitStatus)](#Init._downloadAllBUs) ⇒ Promise.<void> * [.upgradeProject(properties, [initial], [repoName])](#Init.upgradeProject) ⇒ Promise.<boolean> - * [._getMissingCredentials(properties)](#Init._getMissingCredentials) ⇒ Array.<string> * [.installDependencies([repoName])](#Init.installDependencies) ⇒ Promise.<boolean> * [._getDefaultPackageJson([currentContent])](#Init._getDefaultPackageJson) ⇒ Promise.<{script: object, author: string, license: string}> @@ -7501,18 +7696,6 @@ wrapper around npm dependency & configuration file setup | [initial] | boolean | print message if not part of initial setup | | [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - -### Init.\_getMissingCredentials(properties) ⇒ Array.<string> -finds credentials that are set up in config but not in auth file - -**Kind**: static method of [Init](#Init) -**Returns**: Array.<string> - list of credential names - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | javascript object in .mcdevrc.json | - ### Init.installDependencies([repoName]) ⇒ Promise.<boolean> @@ -7563,7 +7746,6 @@ CLI helper class * [._initMarkets()](#Init._initMarkets) * [._downloadAllBUs(bu, gitStatus)](#Init._downloadAllBUs) ⇒ Promise.<void> * [.upgradeProject(properties, [initial], [repoName])](#Init.upgradeProject) ⇒ Promise.<boolean> - * [._getMissingCredentials(properties)](#Init._getMissingCredentials) ⇒ Array.<string> * [.installDependencies([repoName])](#Init.installDependencies) ⇒ Promise.<boolean> * [._getDefaultPackageJson([currentContent])](#Init._getDefaultPackageJson) ⇒ Promise.<{script: object, author: string, license: string}> @@ -7723,18 +7905,6 @@ wrapper around npm dependency & configuration file setup | [initial] | boolean | print message if not part of initial setup | | [repoName] | string | if git URL was provided earlier, the repo name was extracted to use it for npm init | - - -### Init.\_getMissingCredentials(properties) ⇒ Array.<string> -finds credentials that are set up in config but not in auth file - -**Kind**: static method of [Init](#Init) -**Returns**: Array.<string> - list of credential names - -| Param | Type | Description | -| --- | --- | --- | -| properties | TYPE.Mcdevrc | javascript object in .mcdevrc.json | - ### Init.installDependencies([repoName]) ⇒ Promise.<boolean> @@ -7787,6 +7957,7 @@ Util that contains logger and simple util methods * [.metadataLogger(level, type, method, payload, [source])](#Util.metadataLogger) ⇒ void * [.replaceByObject(str, obj)](#Util.replaceByObject) ⇒ string \| object * [.inverseGet(objs, val)](#Util.inverseGet) ⇒ string + * [.getDependentMetadata(fixedType)](#Util.getDependentMetadata) ⇒ Array.<string> * [.getMetadataHierachy(metadataTypes)](#Util.getMetadataHierachy) ⇒ Object.<string, Array.<string>> * [.resolveObjPath(path, obj)](#Util.resolveObjPath) ⇒ any * [.execSync(cmd, [args], [hideOutput])](#Util.execSync) ⇒ string \| void @@ -7798,6 +7969,9 @@ Util that contains logger and simple util methods * [.getKeysString(keyArr, [isId])](#Util.getKeysString) ⇒ string * [.sleep(ms)](#Util.sleep) ⇒ Promise.<void> * [.getSsjs(code)](#Util.getSsjs) ⇒ string + * [.stringLike(testString, search)](#Util.stringLike) ⇒ boolean + * [.fieldsLike(metadata, [filters])](#Util.fieldsLike) ⇒ boolean + * [.capitalizeFirstLetter(str)](#Util.capitalizeFirstLetter) ⇒ string @@ -7882,7 +8056,8 @@ used to ensure the program tells surrounding software that an unrecoverable erro ### Util.isTrue(attrValue) ⇒ boolean -SFMC accepts multiple true values for Boolean attributes for which we are checking here +SFMC accepts multiple true values for Boolean attributes for which we are checking here. +The same problem occurs when evaluating boolean CLI flags **Kind**: static method of [Util](#Util) **Returns**: boolean - attribute value == true ? true : false @@ -7894,7 +8069,8 @@ SFMC accepts multiple true values for Boolean attributes for which we are checki ### Util.isFalse(attrValue) ⇒ boolean -SFMC accepts multiple false values for Boolean attributes for which we are checking here +SFMC accepts multiple false values for Boolean attributes for which we are checking here. +The same problem occurs when evaluating boolean CLI flags **Kind**: static method of [Util](#Util) **Returns**: boolean - attribute value == false ? true : false @@ -7906,7 +8082,7 @@ SFMC accepts multiple false values for Boolean attributes for which we are check ### Util.\_isValidType(selectedType, [handleOutside]) ⇒ boolean -helper for [retrieve](#Mcdev.retrieve), [retrieveAsTemplate](#Mcdev.retrieveAsTemplate) and [deploy](#Mcdev.deploy) +helper for Mcdev.retrieve, Mcdev.retrieveAsTemplate and Mcdev.deploy **Kind**: static method of [Util](#Util) **Returns**: boolean - type ok or not @@ -7943,9 +8119,9 @@ wrapper around our standard winston logging to console and logfile **Kind**: static method of [Util](#Util) **Returns**: object - initiated logger for console and file -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [noLogFile] | boolean | false | optional flag to indicate if we should log to file; CLI logs are always on | +| Param | Type | Description | +| --- | --- | --- | +| [noLogFile] | boolean | optional flag to indicate if we should log to file; CLI logs are always on | @@ -7954,10 +8130,10 @@ initiate winston logger **Kind**: static method of [Util](#Util) -| Param | Type | Default | Description | -| --- | --- | --- | --- | -| [restart] | boolean | false | if true, logger will be restarted; otherwise, an existing logger will be used | -| [noLogFile] | boolean | false | if false, logger will log to file; otherwise, only to console | +| Param | Type | Description | +| --- | --- | --- | +| [restart] | boolean | if true, logger will be restarted; otherwise, an existing logger will be used | +| [noLogFile] | boolean | if false, logger will log to file; otherwise, only to console | @@ -8001,6 +8177,18 @@ get key of an object based on the first matching value | objs | object | object of objects to be searched | | val | string | value to be searched for | + + +### Util.getDependentMetadata(fixedType) ⇒ Array.<string> +helper for Mcdev.fixKeys. Retrieve dependent metadata + +**Kind**: static method of [Util](#Util) +**Returns**: Array.<string> - array of types that depend on the given type + +| Param | Type | Description | +| --- | --- | --- | +| fixedType | string | type of the metadata passed as a parameter to fixKeys function | + ### Util.getMetadataHierachy(metadataTypes) ⇒ Object.<string, Array.<string>> @@ -8130,7 +8318,7 @@ pause execution of code; useful when multiple server calls are dependent on each ### Util.getSsjs(code) ⇒ string -helper for [_extractCode](#Asset._extractCode) and [prepExtractedCode](#Script.prepExtractedCode) to determine if a code block is a valid SSJS block +helper for Asset.extractCode and Script.prepExtractedCode to determine if a code block is a valid SSJS block **Kind**: static method of [Util](#Util) **Returns**: string - the SSJS code if code block is a valid SSJS block, otherwise null @@ -8154,6 +8342,44 @@ the following is invalid: // 3 ``` + + +### Util.stringLike(testString, search) ⇒ boolean +allows us to filter just like with SQL's LIKE operator + +**Kind**: static method of [Util](#Util) +**Returns**: boolean - true if testString matches search + +| Param | Type | Description | +| --- | --- | --- | +| testString | string | field value to test | +| search | string | search string in SQL LIKE format | + + + +### Util.fieldsLike(metadata, [filters]) ⇒ boolean +returns true if no LIKE filter is defined or if all filters match + +**Kind**: static method of [Util](#Util) +**Returns**: boolean - true if no LIKE filter is defined or if all filters match + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.MetadataTypeItem | a single metadata item | +| [filters] | object | only used in recursive calls | + + + +### Util.capitalizeFirstLetter(str) ⇒ string +helper used by SOAP methods to ensure the type always uses an upper-cased first letter + +**Kind**: static method of [Util](#Util) +**Returns**: string - str with first letter capitalized + +| Param | Type | Description | +| --- | --- | --- | +| str | string | string to capitalize | + ## csvToArray(csv) ⇒ Array.<string> @@ -8166,6 +8392,125 @@ helper to convert CSVs into an array. if only one value was given, it's also ret | --- | --- | --- | | csv | string | potentially comma-separated value or null | + + +## Mcdev.(methodName, businessUnit, [selectedType], [keys]) ⇒ Promise.<Object.<string, Array.<string>>> +run a method across BUs + +**Kind**: global function +**Returns**: Promise.<Object.<string, Array.<string>>> - key: business unit name, value: list of affected item keys + +| Param | Type | Description | +| --- | --- | --- | +| methodName | 'execute' \| 'pause' \| 'fixKeys' | what to run | +| businessUnit | string | name of BU | +| [selectedType] | TYPE.SupportedMetadataTypes | limit to given metadata types | +| [keys] | Array.<string> | customerkey of the metadata | + + + +## Mcdev.(methodName, cred, bu, [type], keyArr) ⇒ Promise.<Array.<string>> +helper for [Mcdev.#runMethod](Mcdev.#runMethod) + +**Kind**: global function +**Returns**: Promise.<Array.<string>> - list of keys that were affected + +| Param | Type | Description | +| --- | --- | --- | +| methodName | 'execute' \| 'pause' \| 'fixKeys' | what to run | +| cred | string | name of Credential | +| bu | string | name of BU | +| [type] | TYPE.SupportedMetadataTypes | limit execution to given metadata type | +| keyArr | Array.<string> | customerkey of the metadata | + + + +## Mcdev.(selectedType, buObject) ⇒ Array.<string> +helper for [Mcdev.#runOnBU](Mcdev.#runOnBU) + +**Kind**: global function +**Returns**: Array.<string> - keyArr + +| Param | Type | Description | +| --- | --- | --- | +| selectedType | TYPE.SupportedMetadataTypes | limit execution to given metadata type | +| buObject | TYPE.BuObject | properties for auth | + + + +## Mcdev.(cred, bu, type, [keyArr]) ⇒ Promise.<Array.<string>> +Updates the key to match the name field + +**Kind**: global function +**Returns**: Promise.<Array.<string>> - list of keys that were affected + +| Param | Type | Description | +| --- | --- | --- | +| cred | string | name of Credential | +| bu | string | name of BU | +| type | TYPE.SupportedMetadataTypes | limit execution to given metadata type | +| [keyArr] | Array.<string> | customerkey of the metadata | + + + +## Automation.(metadata) ⇒ boolean +helper for [postRetrieveTasks](#Automation.postRetrieveTasks) and [execute](#Automation.execute) + +**Kind**: global function +**Returns**: boolean - true if the automation schedule is valid + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AutomationItem | a single automation | + + + +## Automation.(metadataMap, key) ⇒ Promise.<{key:string, response:object}> +helper for [execute](#Automation.execute) + +**Kind**: global function +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response + +| Param | Type | Description | +| --- | --- | --- | +| metadataMap | TYPE.AutomationMap | map of metadata | +| key | string | key of the metadata | + + + +## Automation.(metadataEntry) ⇒ Promise.<{key:string, response:object}> +helper for [execute](#Automation.execute) + +**Kind**: global function +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response + +| Param | Type | Description | +| --- | --- | --- | +| metadataEntry | TYPE.AutomationItem | metadata object | + + + +## Automation.(metadata) ⇒ Promise.<{key:string, response:object}> +helper for [pause](#Automation.pause) + +**Kind**: global function +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AutomationItem | automation metadata | + + + +## Automation.(metadata) +helper for [preDeployTasks](#Automation.preDeployTasks) and [execute](#Automation.execute) + +**Kind**: global function + +| Param | Type | Description | +| --- | --- | --- | +| metadata | TYPE.AutomationItem | metadata mapped by their keyField | + ## Automation.(metadataMap, key) ⇒ Promise.<void> @@ -8181,16 +8526,18 @@ helper for [postDeployTasks](#Automation.postDeployTasks) -## Automation.(metadataMap, originalMetadataMap, key) -helper for [postDeployTasks](postDeployTasks) +## Automation.(metadataMap, originalMetadataMap, key, [oldKey]) ⇒ Promise.<{key:string, response:object}> +helper for [postDeployTasks](#Automation.postDeployTasks) **Kind**: global function +**Returns**: Promise.<{key:string, response:object}> - metadata key and API response | Param | Type | Description | | --- | --- | --- | | metadataMap | TYPE.AutomationMap | metadata mapped by their keyField | | originalMetadataMap | TYPE.AutomationMap | metadata to be updated (contains additioanl fields) | | key | string | current customer key | +| [oldKey] | string | old customer key before fixKey / changeKeyValue / changeKeyField | diff --git a/lib/Deployer.js b/lib/Deployer.js index 3d064049a..5b4d283ff 100644 --- a/lib/Deployer.js +++ b/lib/Deployer.js @@ -44,17 +44,17 @@ class Deployer { * @param {string} businessUnit references credentials from properties.json * @param {TYPE.SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type * @param {string[]} [keyArr] limit deployment to given metadata keys - * @param {boolean} [fromRetrieve] optionally deploy whats defined via selectedTypesArr + keyArr directly from retrieve folder instead of from deploy folder * @returns {Promise.>} deployed metadata per BU (first key: bu name, second key: metadata type) */ - static async deploy(businessUnit, selectedTypesArr, keyArr, fromRetrieve) { + static async deploy(businessUnit, selectedTypesArr, keyArr) { Util.logger.info('mcdev:: Deploy'); const buMultiMetadataTypeMap = {}; const properties = await config.getProperties(); if (!(await config.checkProperties(properties))) { return null; } - if (fromRetrieve) { + const deployDirBak = properties.directories.deploy; + if (Util.OPTIONS.fromRetrieve) { properties.directories.deploy = properties.directories.retrieve; } if (Array.isArray(selectedTypesArr)) { @@ -66,7 +66,7 @@ class Deployer { } } if ( - fromRetrieve && + Util.OPTIONS.fromRetrieve && (!selectedTypesArr || !Array.isArray(selectedTypesArr) || !selectedTypesArr.length || @@ -97,8 +97,7 @@ class Deployer { bu, properties, selectedTypesArr, - keyArr, - fromRetrieve + keyArr ); buMultiMetadataTypeMap[cred + '/' + bu] = multiMetadataTypeMap; counter_credBu++; @@ -137,7 +136,7 @@ class Deployer { return; } // valid credential given and -all- BUs targeted - Util.logger.info(`\n :: Deploying all BUs for ${cred}`); + Util.logger.info(`:: Deploying all BUs for ${cred}`); let counter_credBu = 0; // for (const bu in properties.credentials[cred].businessUnits) { const deployFolders = await File.readDirectories( @@ -151,15 +150,14 @@ class Deployer { buPath, properties, selectedTypesArr, - keyArr, - fromRetrieve + keyArr ); buMultiMetadataTypeMap[cred + '/' + buPath] = multiMetadataTypeMap; counter_credBu++; Util.logger.info(''); Util.startLogger(true); } - Util.logger.info(`\n :: ${counter_credBu} BUs for ${cred}\n`); + Util.logger.info(` :: ${counter_credBu} BUs for ${cred}\n`); } else { // either bad credential or specific BU or no BU given const multiMetadataTypeMap = await this._deployBU( @@ -167,30 +165,31 @@ class Deployer { bu, properties, selectedTypesArr, - keyArr, - fromRetrieve + keyArr ); counter_credBu++; buMultiMetadataTypeMap[cred + '/' + bu] = multiMetadataTypeMap; } } + if (Util.OPTIONS.fromRetrieve) { + properties.directories.deploy = deployDirBak; + } if (counter_credBu !== 0) { - Util.logger.info(`\n :: Deployed ${counter_credBu} BUs\n`); + Util.logger.info(`:: Deployed ${counter_credBu} BUs\n`); } return buMultiMetadataTypeMap; } /** - * helper for {@link deploy} + * helper for {@link Deployer.deploy} * * @param {string} cred name of Credential * @param {string} bu name of BU * @param {TYPE.Mcdevrc} properties General configuration to be used in retrieve * @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type * @param {string[]} [keyArr] limit deployment to given metadata keys - * @param {boolean} [fromRetrieve] optionally deploy whats defined via selectedTypesArr + keyArr directly from retrieve folder instead of from deploy folder * @returns {Promise.} ensure that BUs are worked on sequentially */ - static async _deployBU(cred, bu, properties, typeArr, keyArr, fromRetrieve) { + static async _deployBU(cred, bu, properties, typeArr, keyArr) { const buPath = `${cred}/${bu}`; Util.logger.info(`:: Deploying to ${buPath}`); const buObject = await Cli.getCredentialObject(properties, buPath, null, true); @@ -201,7 +200,7 @@ class Deployer { const deployer = new Deployer(properties, buObject); try { // await is required or the calls end up conflicting - multiMetadataTypeMap = await deployer._deploy(typeArr, keyArr, fromRetrieve); + multiMetadataTypeMap = await deployer._deploy(typeArr, keyArr); } catch (ex) { Util.logger.errorStack(ex, 'mcdev.deploy failed'); } @@ -214,11 +213,9 @@ class Deployer { * * @param {TYPE.SupportedMetadataTypes[]} [typeArr] limit deployment to given metadata type (can include subtype) * @param {string[]} [keyArr] limit deployment to given metadata keys - * @param {boolean} [fromRetrieve] if true, no folders will be updated/created - * @param {boolean} [isRefresh] optional flag to indicate that triggeredSend should be refreshed after deployment of assets * @returns {Promise.} Promise of all deployed metadata */ - async _deploy(typeArr, keyArr, fromRetrieve, isRefresh) { + async _deploy(typeArr, keyArr) { if (await File.pathExists(this.deployDir)) { /** @type {TYPE.MultiMetadataTypeMap} */ this.metadata = Deployer.readBUMetadata(this.deployDir, typeArr); @@ -252,7 +249,7 @@ class Deployer { } } - if (!fromRetrieve) { + if (!Util.OPTIONS.fromRetrieve) { await Deployer.createFolderDefinitions( this.deployDir, this.metadata, @@ -292,13 +289,16 @@ class Deployer { // TODO rewrite to allow deploying only a specific sub-type; currently, subtypes are ignored when executing deploy const type = metadataType; if (this.metadata[type]) { - Util.logger.info('Deploying: ' + metadataType); + Util.logger.info( + 'Deploying: ' + + metadataType + + (Util.OPTIONS.fromRetrieve ? ' (from retrieve folder)' : '') + ); const result = await MetadataTypeInfo[type].deploy( this.metadata[type], this.deployDir, - this.retrieveDir, - isRefresh + this.retrieveDir ); multiMetadataTypeMap[type] = result; cache.mergeMetadata(type, result); @@ -312,7 +312,7 @@ class Deployer { * * @param {string} deployDir root directory of metadata. * @param {string[]} [typeArr] limit deployment to given metadata type - * @param {boolean} [listBadKeys=false] do not print errors, used for badKeys() + * @param {boolean} [listBadKeys] do not print errors, used for badKeys() * @returns {TYPE.MultiMetadataTypeMap} Metadata of BU in local directory */ static readBUMetadata(deployDir, typeArr, listBadKeys) { diff --git a/lib/MetadataTypeDefinitions.js b/lib/MetadataTypeDefinitions.js index 2e55ea5c4..477774ef5 100644 --- a/lib/MetadataTypeDefinitions.js +++ b/lib/MetadataTypeDefinitions.js @@ -6,6 +6,7 @@ const MetadataTypeDefinitions = { asset: require('./metadataTypes/definitions/Asset.definition'), attributeGroup: require('./metadataTypes/definitions/AttributeGroup.definition'), + attributeSet: require('./metadataTypes/definitions/AttributeSet.definition'), automation: require('./metadataTypes/definitions/Automation.definition'), campaign: require('./metadataTypes/definitions/Campaign.definition'), contentArea: require('./metadataTypes/definitions/ContentArea.definition'), @@ -32,7 +33,6 @@ const MetadataTypeDefinitions = { role: require('./metadataTypes/definitions/Role.definition'), script: require('./metadataTypes/definitions/Script.definition'), sendClassification: require('./metadataTypes/definitions/SendClassification.definition'), - setDefinition: require('./metadataTypes/definitions/SetDefinition.definition'), transactionalEmail: require('./metadataTypes/definitions/TransactionalEmail.definition'), transactionalPush: require('./metadataTypes/definitions/TransactionalPush.definition'), transactionalSMS: require('./metadataTypes/definitions/TransactionalSMS.definition'), diff --git a/lib/MetadataTypeInfo.js b/lib/MetadataTypeInfo.js index 9b77ba266..0622a8f84 100644 --- a/lib/MetadataTypeInfo.js +++ b/lib/MetadataTypeInfo.js @@ -6,6 +6,7 @@ const MetadataTypeInfo = { asset: require('./metadataTypes/Asset'), attributeGroup: require('./metadataTypes/AttributeGroup'), + attributeSet: require('./metadataTypes/AttributeSet'), automation: require('./metadataTypes/Automation'), campaign: require('./metadataTypes/Campaign'), contentArea: require('./metadataTypes/ContentArea'), @@ -32,7 +33,6 @@ const MetadataTypeInfo = { role: require('./metadataTypes/Role'), script: require('./metadataTypes/Script'), sendClassification: require('./metadataTypes/SendClassification'), - setDefinition: require('./metadataTypes/SetDefinition'), transactionalEmail: require('./metadataTypes/TransactionalEmail'), transactionalPush: require('./metadataTypes/TransactionalPush'), transactionalSMS: require('./metadataTypes/TransactionalSMS'), diff --git a/lib/Retriever.js b/lib/Retriever.js index 86ecf781e..f32acd2e3 100644 --- a/lib/Retriever.js +++ b/lib/Retriever.js @@ -189,7 +189,7 @@ class Retriever { } /** - * helper for {@link retrieve} to get all dependencies of the given types + * helper for {@link Retriever.retrieve} to get all dependencies of the given types * * @param {TYPE.SupportedMetadataTypes[]} metadataTypes list of metadata types to retrieve; can include subtypes! * @returns {TYPE.SupportedMetadataTypes[]} unique list dependent metadata types diff --git a/lib/cli.js b/lib/cli.js index 931c78b19..8c198cf97 100644 --- a/lib/cli.js +++ b/lib/cli.js @@ -31,6 +31,12 @@ yargs .positional('KEY', { type: 'string', describe: 'metadata keys that shall be exclusively downloaded', + }) + .option('like', { + type: 'string', + group: 'Options for retrieve:', + describe: + 'filter metadata components (can include % as wildcard or _ for a single character)', }); }, handler: (argv) => { @@ -59,22 +65,38 @@ yargs }) .option('changeKeyField', { type: 'string', + group: 'Options for deploy:', describe: 'enables updating the key of the deployed metadata with the value in provided field (e.g. c__newKey). Can be used to sync name and key fields.', }) .option('changeKeyValue', { type: 'string', + group: 'Options for deploy:', describe: 'allows updating the key of the metadata to the provided value. Only available if a single type and key is deployed', }) .option('fromRetrieve', { type: 'boolean', + group: 'Options for deploy:', describe: 'optionally deploy from retrieve folder', }) .option('refresh', { type: 'boolean', + group: 'Options for deploy:', describe: 'optional for asset-message: runs refresh command for related triggeredSends after deploy', + }) + .option('execute', { + type: 'boolean', + group: 'Options for deploy:', + describe: + 'optional: executes item after deploy; this will run the item once immediately', + }) + .option('schedule', { + type: 'boolean', + group: 'Options for deploy:', + describe: + 'optionally start existing schedule instead of running item once immediately (only works for automations)', }); }, handler: (argv) => { @@ -307,6 +329,7 @@ yargs builder: (yargs) => { yargs.option('json', { type: 'boolean', + group: 'Options for explainTypes:', describe: 'optionaly return info in json format', }); }, @@ -316,7 +339,7 @@ yargs }, }) .command({ - command: 'createDeltaPkg [range] [--filter ] [--commitHistory ]', + command: 'createDeltaPkg [range]', aliases: ['cdp'], desc: 'Copies commit-based file delta into deploy folder', builder: (yargs) => { @@ -327,11 +350,13 @@ yargs }) .option('filter', { type: 'string', + group: 'Options for createDeltaPkg:', describe: 'Disable templating & instead filter by the specified BU path (comma separated), can include subtype, will be prefixed with "retrieve/"', }) .option('commitHistory', { type: 'number', + group: 'Options for createDeltaPkg:', describe: 'Number of commits to look back for changes (supersedes config)', }); }, @@ -390,8 +415,8 @@ yargs }, }) .command({ - command: 'execute ', - aliases: ['exec'], + command: 'execute [KEY]', + aliases: ['exec', 'start'], desc: 'executes the entity (query/journey/automation etc.)', builder: (yargs) => { yargs @@ -406,11 +431,128 @@ yargs .positional('KEY', { type: 'string', describe: 'key(s) of the metadata component(s)', + }) + .option('like', { + type: 'string', + group: 'Options for execute:', + describe: + 'filter metadata components (can include % as wildcard or _ for a single character)', + }) + .option('schedule', { + type: 'boolean', + group: 'Options for execute:', + describe: + 'optionally start existing schedule instead of running item once immediately (only works for automations)', + }); + }, + handler: (argv) => { + Mcdev.setOptions(argv); + // ! do not allow multiple types to be passed in here via csvToArray + Mcdev.execute(argv.BU, argv.TYPE, csvToArray(argv.KEY)); + }, + }) + .command({ + command: 'schedule [KEY]', + aliases: ['sched'], + desc: 'starts the predefined schedule of the item (shortcut for running execute --schedule)', + builder: (yargs) => { + yargs + .positional('BU', { + type: 'string', + describe: 'the business unit where to start an item', + }) + .positional('TYPE', { + type: 'string', + describe: 'metadata type', + }) + .positional('KEY', { + type: 'string', + describe: 'key(s) of the metadata component(s)', + }) + .option('like', { + type: 'string', + group: 'Options for execute:', + describe: + 'filter metadata components (can include % as wildcard or _ for a single character)', }); }, handler: (argv) => { Mcdev.setOptions(argv); - Mcdev.execute(argv.BU, csvToArray(argv.TYPE), csvToArray(argv.KEY)); + // ! do not allow multiple types to be passed in here via csvToArray + Mcdev.schedule(argv.BU, argv.TYPE, csvToArray(argv.KEY)); + }, + }) + .command({ + command: 'pause [KEY]', + aliases: ['p', 'stop'], + desc: 'pauses the entity (automation etc.)', + builder: (yargs) => { + yargs + .positional('BU', { + type: 'string', + describe: 'the business unit where to start an item', + }) + .positional('TYPE', { + type: 'string', + describe: 'metadata type', + }) + .positional('KEY', { + type: 'string', + describe: 'key(s) of the metadata component(s)', + }) + .option('like', { + type: 'string', + group: 'Options for pause:', + describe: + 'filter metadata components (can include % as wildcard or _ for a single character)', + }); + }, + handler: (argv) => { + Mcdev.setOptions(argv); + // ! do not allow multiple types to be passed in here via csvToArray + Mcdev.pause(argv.BU, argv.TYPE, csvToArray(argv.KEY)); + }, + }) + .command({ + command: 'fixKeys [KEY]', + aliases: ['fx'], + desc: 'changes the key of the items to match the name', + builder: (yargs) => { + yargs + .positional('BU', { + type: 'string', + describe: 'the business unit where to fix keys', + }) + .positional('TYPE', { + type: 'string', + describe: 'metadata type', + }) + .positional('KEY', { + type: 'string', + describe: 'key(s) of the metadata component(s)', + }) + .option('like', { + type: 'string', + group: 'Options for fixKeys:', + describe: + 'filter metadata components (can include % as wildcard or _ for a single character)', + }) + .option('execute', { + type: 'boolean', + group: 'Options for fixKeys:', + describe: + 'optional: executes item after deploy; this will run the item once immediately', + }) + .option('schedule', { + type: 'boolean', + group: 'Options for fixKeys:', + describe: + 'optionally start existing schedule instead of running item once immediately (only works for automations)', + }); + }, + handler: (argv) => { + Mcdev.setOptions(argv); + Mcdev.fixKeys(argv.BU, argv.TYPE, csvToArray(argv.KEY)); }, }) .command({ @@ -434,6 +576,10 @@ yargs type: 'boolean', description: 'Only output errors to CLI', }) + .option('noLogColors', { + type: 'boolean', + description: 'do not use color codes in CLI log output', + }) .option('noLogFile', { type: 'boolean', description: 'Only output log to CLI but not to files', @@ -466,9 +612,13 @@ function csvToArray(csv) { return !csv ? null : csv.includes(',') - ? csv.split(',').map((item) => - // allow whitespace in comma-separated lists - item.trim() - ) - : [csv.trim()]; + ? csv + .split(',') + .map((item) => + // allow whitespace in comma-separated lists + item.trim() + ) + // make sure trailing commas are ignored + .filter(Boolean) + : [csv.trim()].filter(Boolean); } diff --git a/lib/index.js b/lib/index.js index 3589f02b6..b34ae4102 100644 --- a/lib/index.js +++ b/lib/index.js @@ -51,15 +51,19 @@ class Mcdev { static setOptions(argv) { const knownOptions = [ 'api', - 'commitHistory', 'changeKeyField', 'changeKeyValue', + 'commitHistory', + 'execute', 'filter', 'fromRetrieve', 'json', + 'like', + 'noLogColors', + 'noLogFile', 'refresh', + 'schedule', 'skipInteraction', - 'noLogFile', ]; for (const option of knownOptions) { if (argv[option] !== undefined) { @@ -153,6 +157,7 @@ class Mcdev { * @returns {Promise.} - */ static async retrieve(businessUnit, selectedTypesArr, keys, changelogOnly) { + console.time('Time'); // eslint-disable-line no-console Util.startLogger(); Util.logger.info('mcdev:: Retrieve'); const properties = await config.getProperties(); @@ -171,22 +176,32 @@ class Mcdev { } } } - + const resultsObj = {}; if (businessUnit === '*') { - Util.logger.info('\n :: Retrieving all BUs for all credentials'); + Util.logger.info(':: Retrieving all BUs for all credentials'); let counter_credTotal = 0; for (const cred in properties.credentials) { - Util.logger.info(`\n :: Retrieving all BUs for ${cred}`); + Util.logger.info(`:: Retrieving all BUs for ${cred}`); let counter_credBu = 0; for (const bu in properties.credentials[cred].businessUnits) { - await this._retrieveBU(cred, bu, selectedTypesArr, keys); + resultsObj[`${cred}/${bu}`] = await this.#retrieveBU( + cred, + bu, + selectedTypesArr, + keys + ); counter_credBu++; Util.startLogger(true); } counter_credTotal += counter_credBu; - Util.logger.info(`\n :: ${counter_credBu} BUs for ${cred}\n`); + Util.logger.info(`:: ${counter_credBu} BUs of ${cred}\n`); } - Util.logger.info(`\n :: ${counter_credTotal} BUs in total\n`); + const credentialCount = Object.keys(properties.credentials).length; + Util.logger.info( + `:: Done for ${counter_credTotal} BUs of ${credentialCount} credential${ + credentialCount === 1 ? '' : 's' + } in total\n` + ); } else { let [cred, bu] = businessUnit ? businessUnit.split('/') : [null, null]; // to allow all-BU via user selection we need to run this here already @@ -210,17 +225,22 @@ class Mcdev { } if (bu === '*' && properties.credentials && properties.credentials[cred]) { - Util.logger.info(`\n :: Retrieving all BUs for ${cred}`); + Util.logger.info(`:: Retrieving all BUs for ${cred}`); let counter_credBu = 0; for (const bu in properties.credentials[cred].businessUnits) { - await this._retrieveBU(cred, bu, selectedTypesArr, keys); + resultsObj[`${cred}/${bu}`] = await this.#retrieveBU( + cred, + bu, + selectedTypesArr, + keys + ); counter_credBu++; Util.startLogger(true); } - Util.logger.info(`\n :: ${counter_credBu} BUs for ${cred}\n`); + Util.logger.info(`:: Done for ${counter_credBu} BUs of ${cred}\n`); } else { // retrieve a single BU; return - const retrieveChangelog = await this._retrieveBU( + const retrieveChangelog = await this.#retrieveBU( cred, bu, selectedTypesArr, @@ -228,14 +248,33 @@ class Mcdev { changelogOnly ); if (changelogOnly) { + console.timeEnd('Time'); // eslint-disable-line no-console return retrieveChangelog; + } else { + resultsObj[`${cred}/${bu}`] = retrieveChangelog; } Util.logger.info(`:: Done\n`); } } + + // merge all results into one object + for (const credBu in resultsObj) { + for (const type in resultsObj[credBu]) { + const base = resultsObj[credBu][type][0]; + + for (let i = 1; i < resultsObj[credBu][type].length; i++) { + // merge all items into the first array + Object.assign(base, resultsObj[credBu][type][i]); + } + resultsObj[credBu][type] = resultsObj[credBu][type][0]; + } + } + console.timeEnd('Time'); // eslint-disable-line no-console + + return resultsObj; } /** - * helper for {@link retrieve} + * helper for {@link Mcdev.retrieve} * * @private * @param {string} cred name of Credential @@ -245,7 +284,7 @@ class Mcdev { * @param {boolean} [changelogOnly] skip saving, only create json in memory * @returns {Promise.} ensure that BUs are worked on sequentially */ - static async _retrieveBU(cred, bu, selectedTypesArr, keys, changelogOnly) { + static async #retrieveBU(cred, bu, selectedTypesArr, keys, changelogOnly) { const properties = await config.getProperties(); if (!(await config.checkProperties(properties))) { return null; @@ -263,6 +302,7 @@ class Mcdev { // clean up old folders after types were renamed // TODO: Remove renamedTypes-logic 6 months after version 5 release const renamedTypes = { + attributeSet: 'setDefinition', emailSend: 'emailSendDefinition', event: 'eventDefinition', fileLocation: 'ftpLocation', @@ -270,7 +310,7 @@ class Mcdev { triggeredSend: 'triggeredSendDefinition', user: 'accountUser', }; - Util.logger.info(`\n :: Retrieving ${cred}/${bu}\n`); + Util.logger.info(`:: Retrieving ${cred}/${bu}\n`); const retrieveTypesArr = []; if (selectedTypesArr) { for (const selectedType of Array.isArray(selectedTypesArr) @@ -337,9 +377,7 @@ class Mcdev { null, changelogOnly ); - if (changelogOnly) { - return retrieveChangelog; - } + return retrieveChangelog; } catch (ex) { Util.logger.errorStack(ex, 'mcdev.retrieve failed'); } @@ -352,12 +390,14 @@ class Mcdev { * @param {string} businessUnit references credentials from properties.json * @param {TYPE.SupportedMetadataTypes[]} [selectedTypesArr] limit deployment to given metadata type * @param {string[]} [keyArr] limit deployment to given metadata keys - * @param {boolean} [fromRetrieve] optionally deploy whats defined via selectedTypesArr + keyArr directly from retrieve folder instead of from deploy folder * @returns {Promise.>} deployed metadata per BU (first key: bu name, second key: metadata type) */ - static async deploy(businessUnit, selectedTypesArr, keyArr, fromRetrieve = false) { + static async deploy(businessUnit, selectedTypesArr, keyArr) { + console.time('Time'); // eslint-disable-line no-console Util.startLogger(); - return Deployer.deploy(businessUnit, selectedTypesArr, keyArr, fromRetrieve); + const deployResult = await Deployer.deploy(businessUnit, selectedTypesArr, keyArr); + console.timeEnd('Time'); // eslint-disable-line no-console + return deployResult; } /** @@ -701,56 +741,159 @@ class Mcdev { } } /** - * Start an item (query) + * Schedule an item (shortcut for execute --schedule) + * + * @param {string} businessUnit name of BU + * @param {TYPE.SupportedMetadataTypes} [selectedType] limit to given metadata types + * @param {string[]} [keys] customerkey of the metadata + * @returns {Promise.>} key: business unit name, value: list of scheduled item keys + */ + static async schedule(businessUnit, selectedType, keys) { + this.setOptions({ schedule: true }); + return this.#runMethod('execute', businessUnit, selectedType, keys); + } + /** + * Start/execute an item + * + * @param {string} businessUnit name of BU + * @param {TYPE.SupportedMetadataTypes} [selectedType] limit to given metadata types + * @param {string[]} [keys] customerkey of the metadata + * @returns {Promise.>} key: business unit name, value: list of executed item keys + */ + static async execute(businessUnit, selectedType, keys) { + return this.#runMethod('execute', businessUnit, selectedType, keys); + } + /** + * pause an item + * + * @param {string} businessUnit name of BU + * @param {TYPE.SupportedMetadataTypes} [selectedType] limit to given metadata types + * @param {string[]} [keys] customerkey of the metadata + * @returns {Promise.>} key: business unit name, value: list of paused item keys + */ + static async pause(businessUnit, selectedType, keys) { + return this.#runMethod('pause', businessUnit, selectedType, keys); + } + /** + * Updates the key to match the name field + * + * @param {string} businessUnit name of BU + * @param {TYPE.SupportedMetadataTypes} selectedType limit to given metadata types + * @param {string[]} [keys] customerkey of the metadata + * @returns {Promise.>} key: business unit name, value: list of paused item keys + */ + static async fixKeys(businessUnit, selectedType, keys) { + return this.#runMethod('fixKeys', businessUnit, selectedType, keys); + } + /** + * run a method across BUs * + * @param {'execute'|'pause'|'fixKeys'} methodName what to run * @param {string} businessUnit name of BU - * @param {TYPE.SupportedMetadataTypes[]} [selectedTypesArr] limit to given metadata types - * @param {string[]} keys customerkey of the metadata - * @returns {Promise.} true if all started successfully, false if not + * @param {TYPE.SupportedMetadataTypes} [selectedType] limit to given metadata types + * @param {string[]} [keys] customerkey of the metadata + * @returns {Promise.>} key: business unit name, value: list of affected item keys */ - static async execute(businessUnit, selectedTypesArr, keys) { + static async #runMethod(methodName, businessUnit, selectedType, keys) { Util.startLogger(); - Util.logger.info('mcdev:: Execute'); + let lang_past; + let lang_present; + let requireKeyOrLike; + let checkMetadataSupport; + const resultObj = {}; + + switch (methodName) { + case 'execute': { + lang_past = 'executed'; + lang_present = 'executing'; + requireKeyOrLike = true; + checkMetadataSupport = true; + break; + } + case 'pause': { + lang_past = 'paused'; + lang_present = 'pausing'; + requireKeyOrLike = true; + checkMetadataSupport = true; + break; + } + case 'fixKeys': { + lang_past = 'fixed keys'; + lang_present = 'fixing keys'; + requireKeyOrLike = false; + checkMetadataSupport = false; + break; + } + } + + Util.logger.info(`mcdev:: ${methodName} ${selectedType}`); const properties = await config.getProperties(); let counter_credBu = 0; - let counter_failed = 0; + let counter_credKeys = 0; if (!(await config.checkProperties(properties))) { // return null here to avoid seeing 2 error messages for the same issue - return null; + return resultObj; } - if (Array.isArray(selectedTypesArr)) { - // types and keys can be provided but for each type all provided keys are applied as filter - for (const selectedType of Array.isArray(selectedTypesArr) - ? selectedTypesArr - : Object.keys(selectedTypesArr)) { - if (!Util._isValidType(selectedType)) { - return; - } - } + if (!Util._isValidType(selectedType)) { + return resultObj; } + if ( + checkMetadataSupport && + !Object.prototype.hasOwnProperty.call(MetadataTypeInfo[selectedType], methodName) + ) { + Util.logger.error( + ` ☇ skipping ${selectedType}: ${methodName} is not supported yet for ${selectedType}` + ); + return resultObj; + } + + if ( + requireKeyOrLike && + (!Array.isArray(keys) || !keys.length) && + (!Util.OPTIONS.like || !Object.keys(Util.OPTIONS.like).length) + ) { + Util.logger.error('At least one key or a --like filter is required.'); + return resultObj; + } else if ( + Array.isArray(keys) && + keys.length && + Util.OPTIONS.like && + Object.keys(Util.OPTIONS.like).length + ) { + Util.logger.error('You can either specify keys OR a --like filter.'); + return resultObj; + } + if (businessUnit === '*') { + Util.OPTIONS._multiBuExecution = true; Util.logger.info( - '\n :: Executing the entity on all BUs for all credentials' + `:: ${lang_present} the ${selectedType} on all BUs for all credentials` ); let counter_credTotal = 0; for (const cred in properties.credentials) { - Util.logger.info(`\n :: Executing the entity on all BUs for ${cred}`); - + Util.logger.info(`:: ${lang_present} ${selectedType} on all BUs for ${cred}`); + // reset counter per cred + counter_credKeys = 0; + counter_credBu = 0; for (const bu in properties.credentials[cred].businessUnits) { - if (await this._executeBU(cred, bu, selectedTypesArr, keys)) { - counter_credBu++; - } else { - counter_failed++; - } + resultObj[cred + '/' + bu] = await this.#runOnBU( + methodName, + cred, + bu, + selectedType, + keys + ); + counter_credBu++; + counter_credKeys += resultObj[cred + '/' + bu].length; Util.startLogger(true); } counter_credTotal += counter_credBu; Util.logger.info( - `\n :: Executed the entity on ${counter_credBu} BUs for ${cred}\n` + `:: ${lang_past} for ${counter_credKeys} ${selectedType}s on ${counter_credBu} BUs for ${cred}` ); } Util.logger.info( - `\n :: Executed the entity on ${counter_credTotal} BUs in total\n` + `:: ${lang_past} ${selectedType} on ${counter_credTotal} BUs in total\n` ); } else { let [cred, bu] = businessUnit ? businessUnit.split('/') : [null, null]; @@ -767,91 +910,248 @@ class Mcdev { true ); if (buObject === null) { - return; + return resultObj; } else { cred = buObject.credential; bu = buObject.businessUnit; } } if (bu === '*' && properties.credentials && properties.credentials[cred]) { - Util.logger.info(`\n :: Executing the entity on all BUs for ${cred}`); - let counter_credBu = 0; + Util.OPTIONS._multiBuExecution = true; + Util.logger.info(`:: ${lang_present} ${selectedType} on all BUs for ${cred}`); for (const bu in properties.credentials[cred].businessUnits) { - if (await this._executeBU(cred, bu, selectedTypesArr, keys)) { - counter_credBu++; - } else { - counter_failed++; - } + resultObj[cred + '/' + bu] = await this.#runOnBU( + methodName, + cred, + bu, + selectedType, + keys + ); + counter_credBu++; + counter_credKeys += resultObj[cred + '/' + bu].length; Util.startLogger(true); } Util.logger.info( - `\n :: Executed the entity on ${counter_credBu} BUs for ${cred}\n` + `:: ${lang_past} for ${counter_credKeys} ${selectedType}s on ${counter_credBu} BUs for ${cred}` ); } else { - // execute the entity on one BU only - if (await this._executeBU(cred, bu, selectedTypesArr, keys)) { - counter_credBu++; - } else { - counter_failed++; - } - Util.logger.info(`\n :: Done\n`); + // execute runMethod for the entity on one BU only + resultObj[cred + '/' + bu] = await this.#runOnBU( + methodName, + cred, + bu, + selectedType, + keys + ); + Util.logger.info(`:: Done`); } } - if (counter_credBu !== 0) { - Util.logger.info(`\n :: Executed query on ${counter_credBu} BUs\n`); - } - return counter_failed === 0 ? true : false; + return resultObj; } /** - * helper for {@link execute} + * helper for {@link Mcdev.#runMethod} * + * @param {'execute'|'pause'|'fixKeys'} methodName what to run * @param {string} cred name of Credential * @param {string} bu name of BU - * @param {TYPE.SupportedMetadataTypes[]} [selectedTypesArr] limit execution to given metadata type + * @param {TYPE.SupportedMetadataTypes} [type] limit execution to given metadata type * @param {string[]} keyArr customerkey of the metadata - * @returns {Promise.} true if all items were executed, false otherwise + * @returns {Promise.} list of keys that were affected */ - static async _executeBU(cred, bu, selectedTypesArr, keyArr) { + static async #runOnBU(methodName, cred, bu, type, keyArr) { const properties = await config.getProperties(); - let counter_failed = 0; + const resultArr = []; const buObject = await Cli.getCredentialObject( properties, cred === null ? null : cred + '/' + bu, null, true ); - if (!keyArr || (Array.isArray(keyArr) && !keyArr.length)) { - throw new Error('No keys were provided'); + try { + if (!type) { + throw new Error('No type was provided'); + } + if (buObject !== null) { + cache.initCache(buObject); + cred = buObject.credential; + bu = buObject.businessUnit; + } + Util.logger.info(`:: ${methodName} ${type} on ${cred}/${bu}`); + MetadataTypeInfo[type].client = auth.getSDK(buObject); + + MetadataTypeInfo[type].properties = properties; + MetadataTypeInfo[type].buObject = buObject; + switch (methodName) { + case 'fixKeys': { + { + resultArr.push(...(await this.#fixKeys(cred, bu, type, keyArr))); + + break; + } + } + default: { + if (Util.OPTIONS.like && Object.keys(Util.OPTIONS.like).length) { + keyArr = await this.#retrieveKeysWithLike(type, buObject); + } + if (!keyArr || (Array.isArray(keyArr) && !keyArr.length)) { + throw new Error('No keys were provided'); + } // result will be undefined (false) if methodName is not supported for the type + resultArr.push(...(await MetadataTypeInfo[type][methodName](keyArr))); + } + } + } catch (ex) { + Util.logger.errorStack(ex, 'mcdev.' + methodName + ' failed'); } - if (!selectedTypesArr || (Array.isArray(selectedTypesArr) && !selectedTypesArr.length)) { - throw new Error('No type was provided'); + + return resultArr; + } + + /** + * helper for {@link Mcdev.#runOnBU} + * + * @param {TYPE.SupportedMetadataTypes} selectedType limit execution to given metadata type + * @param {TYPE.BuObject} buObject properties for auth + * @returns {string[]} keyArr + */ + static async #retrieveKeysWithLike(selectedType, buObject) { + const properties = await config.getProperties(); + + // cache depenencies + const deployOrder = Util.getMetadataHierachy([selectedType]); + for (const type in deployOrder) { + const subTypeArr = deployOrder[type]; + MetadataTypeInfo[type].client = auth.getSDK(buObject); + MetadataTypeInfo[type].properties = properties; + MetadataTypeInfo[type].buObject = buObject; + Util.logger.info(`Caching dependent Metadata: ${type}`); + Util.logSubtypes(subTypeArr); + const result = await MetadataTypeInfo[type].retrieveForCache(null, subTypeArr); + if (result) { + if (Array.isArray(result)) { + for (const result_i of result) { + if (result_i?.metadata && Object.keys(result_i.metadata).length) { + cache.mergeMetadata(type, result_i.metadata); + } + } + } else { + cache.setMetadata(type, result.metadata); + } + } } - if (buObject !== null) { - cache.initCache(buObject); - cred = buObject.credential; - bu = buObject.businessUnit; + + // find all keys in chosen type that match the like-filter + const keyArr = []; + const metadataMap = cache.getCache()[selectedType]; + if (!metadataMap) { + throw new Error(`Selected type ${selectedType} could not be cached`); } Util.logger.info( - `\n :: Executing ${selectedTypesArr.join(', ')} on ${cred}/${bu}\n` + Util.getGrayMsg(`Found ${Object.keys(metadataMap).length} ${selectedType}s`) + ); + for (const originalKey in metadataMap) { + // hide postRetrieveOutput + Util.setLoggingLevel({ silent: true }); + metadataMap[originalKey] = MetadataTypeInfo[selectedType].postRetrieveTasks( + metadataMap[originalKey] + ); + // reactivate logging + Util.setLoggingLevel({}); + if (Util.fieldsLike(metadataMap[originalKey])) { + keyArr.push(originalKey); + } + } + Util.logger.info( + Util.getGrayMsg( + `Identified ${keyArr.length} ${selectedType}${ + keyArr.length === 1 ? '' : 's' + } that match${keyArr.length === 1 ? 'es' : ''} the like-filter` + ) + ); + + return keyArr; + } + /** + * Updates the key to match the name field + * + * @param {string} cred name of Credential + * @param {string} bu name of BU + * @param {TYPE.SupportedMetadataTypes} type limit execution to given metadata type + * @param {string[]} [keyArr] customerkey of the metadata + * @returns {Promise.} list of keys that were affected + */ + static async #fixKeys(cred, bu, type, keyArr) { + const properties = await config.getProperties(); + let actuallyFixedKeys = []; + const resultArr = []; + + if ( + MetadataTypeDefinitions[type].keyIsFixed === true || + MetadataTypeDefinitions[type].keyField === MetadataTypeDefinitions[type].idField + ) { + Util.logger.error(`Key cannot be updated for this type`); + return resultArr; + } + + const buObject = await Cli.getCredentialObject( + properties, + cred === null ? null : cred + '/' + bu, + null, + true ); try { - // more than one type was provided, iterate types and execute items - for (const type of selectedTypesArr) { - try { - MetadataTypeInfo[type].client = auth.getSDK(buObject); - } catch (ex) { - Util.logger.error(ex.message); - return; - } - // result will be undefined (false) if execute is not supported for the type - if (!(await MetadataTypeInfo[type].execute(keyArr))) { - counter_failed++; + Util.logger.info(`Retrieving latest versions of ${type} from server`); + const retriever = new Retriever(properties, buObject); + const retrieved = await retriever.retrieve([type], keyArr, null, false); + + const metadataMap = Object.values(retrieved)[0][0]; + const keysForDeploy = MetadataTypeInfo[type].getKeysForFixing(metadataMap); + if (keysForDeploy.length < 1) { + Util.logger.warn( + `No items found with a key-name mismatch that match your criteria.\n` + ); + return resultArr; + } + this.setOptions({ + changeKeyField: MetadataTypeDefinitions[type].nameField, + fromRetrieve: true, + }); + const deployed = await Deployer.deploy(cred + '/' + bu, [type], keysForDeploy); + actuallyFixedKeys = Object.keys(Object.values(Object.values(deployed)[0])[0]); + resultArr.push(...actuallyFixedKeys); + const dependentTypes = await Util.getDependentMetadata(type); + if (actuallyFixedKeys && actuallyFixedKeys.length) { + Util.logger.info( + `Successfully updated ${actuallyFixedKeys.length} key${ + actuallyFixedKeys.length === 1 ? '' : 's' + } of type ${type}` + ); + if (dependentTypes.length) { + Util.logger.warn( + `Please re-retrieve the following types as your local copies might now be outdated: ${Util.getGrayMsg( + dependentTypes.join(', ') + )}` + ); + const reRetrieve = await Cli.postFixKeysReretrieve(type, dependentTypes); + if (reRetrieve) { + Util.logger.info( + `Retrieving latest versions of ${dependentTypes.join(', ')} from server` + ); + const retriever = new Retriever(properties, buObject); + await retriever.retrieve(dependentTypes, null, null, false); + } + } else { + Util.logger.info( + `No dependent types found that need to be re-retrieved after fixing keys of type ${type}.` + ); } + } else { + Util.logger.warn(`No keys of type ${type} updated.`); } } catch (ex) { - Util.logger.errorStack(ex, 'mcdev.execute failed'); + Util.logger.errorStack(ex, 'mcdev.fixKeys failed'); } - return counter_failed === 0 ? true : false; + Util.logger.info(`:: Done\n`); + return resultArr; } } diff --git a/lib/metadataTypes/Asset.js b/lib/metadataTypes/Asset.js index 3ff861cce..c44e337c3 100644 --- a/lib/metadataTypes/Asset.js +++ b/lib/metadataTypes/Asset.js @@ -86,7 +86,7 @@ class Asset extends MetadataType { return { metadata: Object.values(metadata)[0], type: this.definition.type }; } /** - * helper for {@link retrieve} + {@link retrieveAsTemplate} + * helper for {@link Asset.retrieve} + {@link Asset.retrieveAsTemplate} * * @private * @returns {TYPE.AssetSubType[]} subtype array @@ -448,14 +448,14 @@ class Asset extends MetadataType { ); } /** - * helper for {@link preDeployTasks} + * helper for {@link Asset.preDeployTasks} * Some metadata types store their actual content as a separate file, e.g. images * This method reads these from the local FS stores them in the metadata object allowing to deploy it * * @param {TYPE.AssetItem} metadata a single asset * @param {TYPE.AssetSubType} subType group of similar assets to put in a folder (ie. images) * @param {string} deployDir directory of deploy files - * @param {boolean} [pathOnly=false] used by getFilesToCommit which does not need the binary file to be actually read + * @param {boolean} [pathOnly] used by getFilesToCommit which does not need the binary file to be actually read * @returns {Promise.} if found will return the path of the binary file */ static async _readExtendedFileFromFS(metadata, subType, deployDir, pathOnly = false) { @@ -504,11 +504,10 @@ class Asset extends MetadataType { * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField * @param {TYPE.MetadataTypeMap} _ originalMetadata to be updated (contains additioanl fields) * @param {{created: number, updated: number}} createdUpdated counter representing successful creates/updates - * @param {boolean} [isRefresh] optional flag to indicate that triggeredSend should be refreshed after deployment of assets * @returns {Promise.} - */ - static async postDeployTasks(metadata, _, createdUpdated, isRefresh) { - if (isRefresh) { + static async postDeployTasks(metadata, _, createdUpdated) { + if (Util.OPTIONS.refresh) { if (createdUpdated.updated) { // only run this if assets were updated. for created assets we do not expect this._refreshTriggeredSend(metadata); @@ -521,7 +520,7 @@ class Asset extends MetadataType { } /** - * helper for {@link postDeployTasks}. triggers a refresh of active triggerredSendDefinitions associated with the updated asset-message items. Gets executed if isRefresh is true. + * helper for {@link Asset.postDeployTasks}. triggers a refresh of active triggerredSendDefinitions associated with the updated asset-message items. Gets executed if refresh option has been set. * * @private * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField @@ -546,7 +545,7 @@ class Asset extends MetadataType { TriggeredSend.client = this.client; try { // find refreshable TSDs - const tsdObj = (await TriggeredSend.findRefreshableItems()).metadata; + const tsdObj = (await TriggeredSend.findRefreshableItems(true)).metadata; const tsdCountInitial = Object.keys(tsdObj).length; const emailCount = legacyIdArr.length; @@ -867,7 +866,7 @@ class Asset extends MetadataType { } /** - * helper for {@link preDeployTasks} that loads extracted code content back into JSON + * helper for {@link Asset.preDeployTasks} that loads extracted code content back into JSON * * @param {TYPE.AssetItem} metadata a single asset definition * @param {string} deployDir directory of deploy files @@ -1151,7 +1150,7 @@ class Asset extends MetadataType { return fileList; } /** - * helper for {@link preDeployTasks} that loads extracted code content back into JSON + * helper for {@link Asset.preDeployTasks} that loads extracted code content back into JSON * * @param {string} prefix usually the customerkey * @param {object} metadataSlots metadata.views.html.slots or deeper slots.<>.blocks.<>.slots @@ -1231,7 +1230,7 @@ class Asset extends MetadataType { } } /** - * helper for {@link postRetrieveTasks} that finds code content in JSON and extracts it + * helper for {@link Asset.postRetrieveTasks} that finds code content in JSON and extracts it * to allow saving that separately and formatted * * @param {TYPE.AssetItem} metadata a single asset definition diff --git a/lib/metadataTypes/AttributeGroup.js b/lib/metadataTypes/AttributeGroup.js index cf84ede2a..086ffd845 100644 --- a/lib/metadataTypes/AttributeGroup.js +++ b/lib/metadataTypes/AttributeGroup.js @@ -1,7 +1,9 @@ 'use strict'; -const MetadataType = require('./MetadataType'); const TYPE = require('../../types/mcdev.d'); +const MetadataType = require('./MetadataType'); +const Util = require('../util/util'); +const cache = require('../util/cache'); /** * AttributeGroup MetadataType @@ -18,7 +20,7 @@ class AttributeGroup extends MetadataType { * @param {string} [key] customer key of single item to retrieve * @returns {Promise.} Promise of metadata */ - static retrieve(retrieveDir, _, __, key) { + static async retrieve(retrieveDir, _, __, key) { return super.retrieveREST( retrieveDir, '/hub/v1/contacts/schema/attributeGroups', @@ -34,6 +36,78 @@ class AttributeGroup extends MetadataType { static retrieveForCache() { return super.retrieveREST(null, '/hub/v1/contacts/schema/attributeGroups'); } + + /** + * manages post retrieve steps + * + * @param {TYPE.MetadataTypeItem} metadata a single metadata + * @returns {TYPE.MetadataTypeItem} metadata + */ + static postRetrieveTasks(metadata) { + // Member ID + delete metadata.mID; + + // attributeSet + metadata.attributeSetIdentifiers = metadata.attributeSetIdentifiers.map((attributeSet) => { + try { + const key = cache.searchForField( + 'attributeSet', + attributeSet.definitionID, + 'definitionID', + 'definitionKey' + ); + if (key !== attributeSet.definitionKey) { + throw new Error( + `AttributeSet key mismatch. Found ${key} instead of ${attributeSet.definitionKey}` + ); + } + return key; + } catch (ex) { + Util.logger.warn( + ` - ${this.definition.type} ${metadata[this.definition.keyField]} (for ${ + attributeSet.definitionKey + }): ${ex.message}` + ); + return attributeSet; + } + }); + + // requiredRelationships + // TODO: implement + + // description is not returned by API when empty. Set to empty string to propose the field as an option to users + metadata.description ||= ''; + + // applicationKey is only used by system generated attribute groups and otherwise it's empty. + if (metadata.applicationKey === '') { + // remove useless field + delete metadata.applicationKey; + } + + // connectingID.identifierType seems to be always set to 'FullyQualifiedName' - to be sure we check it here and remove it if it's the case + if (metadata.connectingID?.identifierType === 'FullyQualifiedName') { + // remove useless field + delete metadata.connectingID; + } + + // containsSchemaAttributes is only true for system generated attribute groups and otherwise it's false. + if (!metadata.containsSchemaAttributes) { + delete metadata.containsSchemaAttributes; + } + + // isSystemDefined is only true for system generated attribute groups and cannot be deployed + if (!metadata.isSystemDefined) { + delete metadata.isSystemDefined; + } + + return metadata; + } + /** + * prepares for deployment + * + * @param {TYPE.MetadataTypeItem} metadata a single item + * @returns {TYPE.MetadataTypeItem} Promise + */ } // Assign definition to static attributes diff --git a/lib/metadataTypes/AttributeSet.js b/lib/metadataTypes/AttributeSet.js new file mode 100644 index 000000000..1f9d82984 --- /dev/null +++ b/lib/metadataTypes/AttributeSet.js @@ -0,0 +1,260 @@ +'use strict'; + +const TYPE = require('../../types/mcdev.d'); +const MetadataType = require('./MetadataType'); +const AttributeGroup = require('./AttributeGroup'); +const Util = require('../util/util'); +const cache = require('../util/cache'); + +/** + * AttributeSet MetadataType + * + * @augments MetadataType + */ +class AttributeSet extends MetadataType { + /** + * Retrieves Metadata of schema set Definitions. + * + * @param {string} retrieveDir Directory where retrieved metadata directory will be saved + * @param {void} [_] unused parameter + * @param {void} [__] unused parameter + * @param {string} [key] customer key of single item to retrieve + * @returns {Promise.} Promise + */ + static async retrieve(retrieveDir, _, __, key) { + if (retrieveDir && !cache.getCache()?.attributeGroup) { + // ! attributeGroup and attributeSet both link to each other. caching attributeGroup here "manually", assuming that it's quicker than the other way round + Util.logger.info(' - Caching dependent Metadata: attributeGroup'); + AttributeGroup.buObject = this.buObject; + AttributeGroup.client = this.client; + AttributeGroup.properties = this.properties; + const result = await AttributeGroup.retrieveForCache(); + cache.setMetadata('attributeGroup', result.metadata); + } + return super.retrieveREST( + retrieveDir, + '/hub/v1/contacts/schema/setDefinitions', + null, + null, + key + ); + } + /** + * Retrieves Metadata of schema set definitions for caching. + * + * @returns {Promise.} Promise + */ + static retrieveForCache() { + return super.retrieveREST(null, '/hub/v1/contacts/schema/setDefinitions'); + } + + /** + * Builds map of metadata entries mapped to their keyfields + * + * @param {object} body json of response body + * @param {string|number} [singleRetrieve] key of single item to filter by + * @returns {TYPE.MetadataTypeMap} keyField => metadata map + */ + static parseResponseBody(body, singleRetrieve) { + const metadataCache = super.parseResponseBody(body); + + // make sure we add the entire list to cache before running postRetrieveTasks because of the self-references this type is using + // usually, the cache is only written into after all postRetrieveTasks have been run + cache.setMetadata(this.definition.type, metadataCache); + + const metadataStructure = super.parseResponseBody(body, singleRetrieve); + return metadataStructure; + } + + /** + * manages post retrieve steps + * + * @param {TYPE.MetadataTypeItem} metadata a single metadata + * @returns {TYPE.MetadataTypeItem} metadata + */ + static postRetrieveTasks(metadata) { + // folder + if (metadata.storageLogicalType === 'DataExtension') { + // attributeSet created for Group Connect do not have a folder + super.setFolderPath(metadata); + } + + // source + switch (metadata.storageLogicalType) { + case 'ExactTargetSchema': // synced / shared DEs + case 'DataExtension': { + // local DEs + try { + metadata.r__dataExtension_CustomerKey = cache.searchForField( + 'dataExtension', + metadata.storageReferenceID.value, + 'ObjectID', + 'CustomerKey' + ); + // TODO: check if fields in metadata.sendAttributeStorageName exist in data extension --> error + // TODO: check if fields in data extension exist in metadata.sendAttributeStorageName --> warn + + delete metadata.storageReferenceID; + delete metadata.storageName; + delete metadata.storageObjectInformation; // type ExactTargetSchema only + } catch (ex) { + Util.logger.warn( + ` - ${this.definition.type} ${metadata[this.definition.keyField]}: ${ + ex.message + }` + ); + } + break; + } + case 'MobileAttributes': { + // TODO: implement + // "storageName": "_MobileAddress", + + break; + } + case 'EnterpriseAttributes': { + // TODO: implement + // "storageName": "_EnterpriseAttribute", + + break; + } + case 'PushAttributes': { + // TODO: implement + // "storageName": "_PushAddress", + + break; + } + } + + // relationships to attributeGroups & AttributeSet + if (Array.isArray(metadata.relationships)) { + for (const relationship of metadata.relationships) { + for (const type of ['left', 'right']) { + if ( + relationship[type + 'Item']?.connectingID?.identifierType === + 'FullyQualifiedName' + ) { + delete relationship[type + 'Item'].connectingID; + } + let relationshipObj = null; + switch (relationship[type + 'Item'].relationshipType) { + case 'AttributeGroup': { + try { + relationship[type + 'Item'].r__attributeGroup_definitionKey = + cache.searchForField( + 'attributeGroup', + relationship[type + 'Item']?.identifier, + 'definitionID', + 'definitionKey' + ); + delete relationship[type + 'Item']?.identifier; + } catch (ex) { + Util.logger.warn( + ` - ${this.definition.type} ${ + metadata[this.definition.keyField] + }: ${ex.message}` + ); + } + // get relationship fieldnames + relationshipObj = { + valueDefinitions: this._getSystemValueDefinitions(), + }; + break; + } + case 'AttributeSet': { + try { + relationship[type + 'Item'].r__attributeSet_definitionKey = + cache.searchForField( + 'attributeSet', + relationship[type + 'Item']?.identifier, + 'definitionID', + 'definitionKey' + ); + delete relationship[type + 'Item']?.identifier; + + // get relationship fieldnames + // check if its a self-reference to metadata.valueDefinitions or if it's a reference to another attributeSet + relationshipObj = + relationship[type + 'Item'].r__attributeSet_definitionKey === + metadata.definitionKey + ? metadata + : cache.getByKey( + 'attributeSet', + relationship[type + 'Item'] + .r__attributeSet_definitionKey + ); + } catch (ex) { + Util.logger.warn( + ` - ${this.definition.type} ${ + metadata[this.definition.keyField] + }: ${ex.message}` + ); + } + break; + } + } + try { + // get relationship fieldnames + // resolve field values + for (const attr of relationship.relationshipAttributes) { + const id = attr[type + 'AttributeID']; + const valueDefinition = relationshipObj.valueDefinitions.find( + (item) => item.valueDefinitionID === id + ); + if (valueDefinition) { + attr['c__' + type + 'FullyQualifiedName'] = + valueDefinition.fullyQualifiedName; + delete attr[type + 'AttributeID']; + delete attr[type + 'ConnectingID']; + } else { + throw new Error( + `Could not find ${type}AttributeID ${id} of relationship ${relationship.relationshipID}` + ); + } + } + } catch (ex) { + Util.logger.warn( + ` - ${this.definition.type} ${metadata[this.definition.nameField]} / ${ + metadata[this.definition.keyField] + }: ${ex.message}` + ); + } + } + } + } + + // Member ID + delete metadata.customObjectOwnerMID; + + // connectingID.identifierType seems to be always set to 'FullyQualifiedName' - to be sure we check it here and remove it if it's the case + if (metadata.connectingID?.identifierType === 'FullyQualifiedName') { + // remove useless field + delete metadata.connectingID; + } + + return metadata; + } + + /** + * helper for {@link AttributeSet.postRetrieveTasks} + * + * @returns {object[]} all system value definitions + */ + static _getSystemValueDefinitions() { + if (!this.systemValueDefinitions) { + this.systemValueDefinitions = Object.values(cache.getCache()['attributeSet']) + .flatMap((item) => { + if (item.isSystemDefined) { + return item.valueDefinitions; + } + }) + .filter(Boolean); + } + return this.systemValueDefinitions; + } +} + +// Assign definition to static attributes +AttributeSet.definition = require('../MetadataTypeDefinitions').attributeSet; + +module.exports = AttributeSet; diff --git a/lib/metadataTypes/Automation.js b/lib/metadataTypes/Automation.js index 560ed94e3..d68105298 100644 --- a/lib/metadataTypes/Automation.js +++ b/lib/metadataTypes/Automation.js @@ -47,34 +47,41 @@ class Automation extends MetadataType { ) ); } + // the API seems to handle 50 concurrent requests nicely + const rateLimit = pLimit(50); + const details = results.Results ? await Promise.all( - results.Results.map(async (a) => { - try { - return await this.client.rest.get( - '/automation/v1/automations/' + a.ObjectID - ); - } catch (ex) { + results.Results.map(async (item) => + rateLimit(async () => { try { - if (ex.message == 'socket hang up') { - // one more retry; it's a rare case but retrying again should solve the issue gracefully - return await this.client.rest.get( - '/automation/v1/automations/' + a.ObjectID - ); + return await this.client.rest.get( + '/automation/v1/automations/' + item.ObjectID + ); + } catch (ex) { + try { + if (ex.message == 'socket hang up') { + // one more retry; it's a rare case but retrying again should solve the issue gracefully + return await this.client.rest.get( + '/automation/v1/automations/' + item.ObjectID + ); + } + } catch { + // no extra action needed, handled below } - } catch { - // no extra action needed, handled below + // if we do get here, we should log the error and continue instead of failing to download all automations + Util.logger.error( + ` ☇ skipping Automation ${item.ObjectID}: ${ex.message} ${ex.code}` + ); + return null; } - // if we do get here, we should log the error and continue instead of failing to download all automations - Util.logger.error( - ` ☇ skipping Automation ${a.ObjectID}: ${ex.message} ${ex.code}` - ); - return null; - } - }) + }) + ) ) : []; - let metadataMap = this.parseResponseBody({ items: details }); + + // * if retrieving some automations fails, a null element would remain in the details-array for each of them that needs to be filtered to prevent it from causing issues elsewhere + let metadataMap = this.parseResponseBody({ items: details.filter(Boolean) }); if (Object.keys(metadataMap).length) { // attach notification information to each automation that has any @@ -144,11 +151,19 @@ class Automation extends MetadataType { })); found++; } else { - throw new TypeError(JSON.stringify(notificationsResult)); + if ( + !notificationsResult || + typeof notificationsResult !== 'object' || + Object.keys(notificationsResult).length !== 1 || + !notificationsResult?.programId + ) { + throw new TypeError(JSON.stringify(notificationsResult)); + } + // * if there are no automation notifications, the API returns a single object with the programId } } catch (ex) { Util.logger.debug( - ` ☇ skipping Notifications for Automation ${automationLegacy.key}: ${ex.message} ${ex.code}` + ` ☇ issue retrieving Notifications for automation ${automationLegacy.key}: ${ex.message} ${ex.code}` ); skipped++; } @@ -242,6 +257,7 @@ class Automation extends MetadataType { key: m.CustomerKey, name: m.Name, programId: automationsLegacy.metadata[m.CustomerKey]?.id, + status: automationsLegacy.metadata[m.CustomerKey]?.status, }; } } @@ -318,6 +334,29 @@ class Automation extends MetadataType { throw new Error(JSON.stringify(results)); } } + /** + * helper for {@link Automation.postRetrieveTasks} and {@link Automation.execute} + * + * @param {TYPE.AutomationItem} metadata a single automation + * @returns {boolean} true if the automation schedule is valid + */ + static #isValidSchedule(metadata) { + if (metadata.type === 'scheduled' && metadata.schedule?.startDate) { + try { + if (this.definition.timeZoneMapping[metadata.schedule.timezoneName]) { + // if we found the id in our list, remove the redundant data + delete metadata.schedule.timezoneId; + } + } catch { + Util.logger.debug( + `- Schedule name '${metadata.schedule.timezoneName}' not found in definition.timeZoneMapping` + ); + } + return true; + } else { + return false; + } + } /** * manages post retrieve steps * @@ -332,34 +371,24 @@ class Automation extends MetadataType { if (metadata.type === 'scheduled' && metadata.schedule?.startDate) { // Starting Source == 'Schedule' - try { - if (this.definition.timeZoneMapping[metadata.schedule.timezoneName]) { - // if we found the id in our list, remove the redundant data - delete metadata.schedule.timezoneId; - } - } catch { - Util.logger.debug( - `- Schedule name '${metadata.schedule.timezoneName}' not found in definition.timeZoneMapping` - ); - } - try { - // type 'Running' is temporary status only, overwrite with Scheduled for storage. - if (metadata.type === 'scheduled' && metadata.status === 'Running') { - metadata.status = 'Scheduled'; - } - } catch { - Util.logger.error( - `- ${this.definition.type} ${metadata.name} does not have a valid schedule setting.` - ); + if (!this.#isValidSchedule(metadata)) { return; } + // type 'Running' is temporary status only, overwrite with Scheduled for storage. + if (metadata.type === 'scheduled' && metadata.status === 'Running') { + metadata.status = 'Scheduled'; + } } else if (metadata.type === 'triggered' && metadata.fileTrigger) { // Starting Source == 'File Drop' // Do nothing for now } if (metadata.steps) { + let i = 0; + for (const step of metadata.steps) { - const stepNumber = step.stepNumber || step.step; + i++; + + const stepNumber = step.stepNumber || step.step || i; delete step.stepNumber; delete step.step; @@ -387,14 +416,22 @@ class Automation extends MetadataType { activity.activityObjectId == null ) { Util.logger.debug( - ` - skip parsing of activity due to missing activityObjectId: ${JSON.stringify( - activity - )}` + ` - skipping ${ + metadata[this.definition.keyField] + } activity ${stepNumber}.${ + activity.displayOrder + } due to missing activityObjectId: ${JSON.stringify(activity)}` ); // empty if block } else if (!this.definition.dependencies.includes(activity.r__type)) { Util.logger.debug( - ` - skip parsing because the type is not set up as a dependecy for ${this.definition.type}` + ` - skipping ${ + metadata[this.definition.keyField] + } activity ${stepNumber}.${ + activity.displayOrder + } because the type ${ + activity.r__type + } is not set up as a dependency for ${this.definition.type}` ); } // / if managed by cache we can update references to support deployment @@ -445,6 +482,197 @@ class Automation extends MetadataType { return null; } } + /** + * a function to start query execution via API + * + * @param {string[]} keyArr customerkey of the metadata + * @returns {Promise.} Returns list of keys that were executed + */ + static async execute(keyArr) { + const metadataMap = {}; + for (const key of keyArr) { + if (Util.OPTIONS.schedule) { + // schedule + const results = await this.retrieve(undefined, undefined, undefined, key); + if (Object.keys(results.metadata).length) { + for (const resultKey of Object.keys(results.metadata)) { + if (this.#isValidSchedule(results.metadata[resultKey])) { + metadataMap[resultKey] = results.metadata[resultKey]; + } else { + Util.logger.error( + ` - skipping ${this.definition.type} ${results.metadata[resultKey].name}: no valid schedule settings found.` + ); + } + } + } + } else { + // runOnce + const objectId = await this.#getObjectIdForSingleRetrieve(key); + metadataMap[key] = {}; + metadataMap[key][this.definition.idField] = objectId; + metadataMap[key][this.definition.keyField] = key; + } + } + if (!Object.keys(metadataMap).length) { + Util.logger.error(`No ${this.definition.type} to execute`); + return false; + } + Util.logger.info( + `Starting automations ${ + Util.OPTIONS.schedule + ? 'according to schedule' + : 'to run once (use --schedule or --execute=schedule to schedule instead)' + }: ${Object.keys(metadataMap).length}` + ); + const promiseResults = []; + for (const key of Object.keys(metadataMap)) { + if (Util.OPTIONS.schedule && metadataMap[key].status === 'Scheduled') { + // schedule + Util.logger.info( + ` - skipping ${this.definition.type} ${metadataMap[key].name}: already scheduled.` + ); + } else { + // schedule + runOnce + promiseResults.push(this.#executeItem(metadataMap, key)); + } + } + const results = await Promise.all(promiseResults); + const executedKeyArr = results + .filter(Boolean) + .filter((r) => r.response.OverallStatus === 'OK') + .map((r) => r.key); + Util.logger.info(`Executed ${executedKeyArr.length} of ${keyArr.length} items`); + return executedKeyArr; + } + /** + * helper for {@link Automation.execute} + * + * @param {TYPE.AutomationMap} metadataMap map of metadata + * @param {string} key key of the metadata + * @returns {Promise.<{key:string, response:object}>} metadata key and API response + */ + static async #executeItem(metadataMap, key) { + if (Util.OPTIONS.schedule) { + this.#preDeploySchedule(metadataMap[key]); + metadataMap[key].status = 'Scheduled'; + return this.#scheduleAutomation(metadataMap, metadataMap, key); + } else { + return this.#runOnce(metadataMap[key]); + } + } + + /** + * helper for {@link Automation.execute} + * + * @param {TYPE.AutomationItem} metadataEntry metadata object + * @returns {Promise.<{key:string, response:object}>} metadata key and API response + */ + static async #runOnce(metadataEntry) { + return super.executeSOAP(metadataEntry); + } + + /** + * Standardizes a check for multiple messages but adds query specific filters to error texts + * + * @param {object} ex response payload from REST API + * @returns {string[] | void} formatted Error Message + */ + static getErrorsREST(ex) { + const errors = super.getErrorsREST(ex); + if (errors?.length > 0) { + return errors.map((msg) => + msg + .split('403 Forbidden') + .join('403 Forbidden: Please check if the automation is currently running.') + ); + } + return errors; + } + + /** + * a function to start query execution via API + * + * @param {string[]} keyArr customerkey of the metadata + * @returns {Promise.} Returns list of keys that were paused + */ + static async pause(keyArr) { + const metadataMap = {}; + for (const key of keyArr) { + if (key) { + const results = await this.retrieve(undefined, undefined, undefined, key); + if (Object.keys(results.metadata).length) { + for (const key of Object.keys(results.metadata)) { + if (this.#isValidSchedule(results.metadata[key])) { + metadataMap[key] = results.metadata[key]; + } else { + Util.logger.error( + ` - skipping ${this.definition.type} ${results.metadata[key].name}: no valid schedule settings found.` + ); + } + } + } + } + } + + Util.logger.info(`Pausing automations: ${Object.keys(metadataMap).length}`); + const promiseResults = []; + for (const key of Object.keys(metadataMap)) { + if (metadataMap[key].status === 'Scheduled') { + promiseResults.push(this.#pauseItem(metadataMap[key])); + } else if (metadataMap[key].status === 'PausedSchedule') { + Util.logger.info( + ` - skipping ${this.definition.type} ${metadataMap[key].name}: already paused.` + ); + } else { + Util.logger.error( + ` - skipping ${this.definition.type} ${ + metadataMap[key].name + }: currently ${metadataMap[ + key + ].status.toLowerCase()}. Please try again in a few minutes.` + ); + } + } + const pausedKeyArr = (await Promise.all(promiseResults)) + .filter(Boolean) + .filter((r) => r.response.OverallStatus === 'OK') + .map((r) => r.key); + + Util.logger.info(`Paused ${pausedKeyArr.length} of ${keyArr.length} items`); + return pausedKeyArr; + } + + /** + * helper for {@link Automation.pause} + * + * @param {TYPE.AutomationItem} metadata automation metadata + * @returns {Promise.<{key:string, response:object}>} metadata key and API response + */ + static async #pauseItem(metadata) { + const schedule = {}; + try { + const response = await this.client.soap.schedule( + 'Automation', + schedule, + { + Interaction: { + ObjectID: metadata[this.definition.idField], + }, + }, + 'pause', + {} + ); + Util.logger.info( + ` - paused ${this.definition.type}: ${metadata[this.definition.keyField]} / ${ + metadata[this.definition.nameField] + }` + ); + return { key: metadata[this.definition.keyField], response }; + } catch (ex) { + this._handleSOAPErrors(ex, 'pausing', metadata, false); + return null; + } + } /** * Deploys automation - the saved file is the original one due to large differences required for deployment @@ -452,11 +680,10 @@ class Automation extends MetadataType { * @param {TYPE.AutomationMap} metadata metadata mapped by their keyField * @param {string} targetBU name/shorthand of target businessUnit for mapping * @param {string} retrieveDir directory where metadata after deploy should be saved - * @param {boolean} [isRefresh] optional flag - so far not used by automation * @returns {Promise.} Promise */ - static async deploy(metadata, targetBU, retrieveDir, isRefresh) { - const upsertResults = await this.upsert(metadata, targetBU, isRefresh); + static async deploy(metadata, targetBU, retrieveDir) { + const upsertResults = await this.upsert(metadata, targetBU); const savedMetadata = await this.saveResults(upsertResults, retrieveDir, null); if ( this.properties.metaDataTypes.documentOnRetrieve.includes(this.definition.type) && @@ -488,11 +715,47 @@ class Automation extends MetadataType { * @returns {Promise} Promise */ static update(metadata, metadataBefore) { - metadata.id = metadataBefore.id; + if (metadataBefore.status === 'Running') { + Util.logger.error( + ` ☇ error updating ${this.definition.type} ${ + metadata[this.definition.keyField] || metadata[this.definition.nameField] + } / ${ + metadata[this.definition.nameField] + }: You cannot update an automation that's currently running. Please wait a bit and retry.` + ); + return null; + } const uri = '/automation/v1/automations/' + metadata.id; return super.updateREST(metadata, uri); } + /** + * helper for {@link Automation.preDeployTasks} and {@link Automation.execute} + * + * @param {TYPE.AutomationItem} metadata metadata mapped by their keyField + */ + static #preDeploySchedule(metadata) { + delete metadata.schedule.rangeTypeId; + delete metadata.schedule.pattern; + delete metadata.schedule.scheduledTime; + delete metadata.schedule.scheduledStatus; + if (this.definition.timeZoneMapping[metadata.schedule.timezoneName]) { + metadata.schedule.timezoneId = + this.definition.timeZoneMapping[metadata.schedule.timezoneName]; + } else { + Util.logger.error( + `Could not find timezone ${metadata.schedule.timezoneName} in definition.timeZoneMapping` + ); + } + + // the upsert API needs this to be named scheduleTypeId; the retrieve API returns it as typeId + metadata.schedule.scheduleTypeId = metadata.schedule.typeId; + delete metadata.schedule.typeId; + + // prep startSource + metadata.startSource = { schedule: metadata.schedule, typeId: 1 }; + } + /** * Gets executed before deploying metadata * @@ -516,25 +779,12 @@ class Automation extends MetadataType { if (metadata.type === 'scheduled' && metadata?.schedule?.startDate) { // Starting Source == 'Schedule' - delete metadata.schedule.rangeTypeId; - delete metadata.schedule.pattern; - delete metadata.schedule.scheduledTime; - delete metadata.schedule.scheduledStatus; - if (this.definition.timeZoneMapping[metadata.schedule.timezoneName]) { - metadata.schedule.timezoneId = - this.definition.timeZoneMapping[metadata.schedule.timezoneName]; - } else { - Util.logger.error( - `Could not find timezone ${metadata.schedule.timezoneName} in definition.timeZoneMapping` - ); - } - delete metadata.schedule.timezoneName; - // the upsert API needs this to be named scheduleTypeId; the retrieve API returns it as typeId - metadata.schedule.scheduleTypeId = metadata.schedule.typeId; - delete metadata.schedule.typeId; + this.#preDeploySchedule(metadata); + // * run _buildSchedule here but only to check if things look ok - do not use the returned schedule object for deploy + this._buildSchedule(metadata.schedule); - // prep startSource - metadata.startSource = { schedule: metadata.schedule, typeId: 1 }; + delete metadata.schedule.timezoneName; + delete metadata.startSource.schedule.timezoneName; } else if (metadata.type === 'triggered' && metadata.fileTrigger) { // Starting Source == 'File Drop' @@ -632,6 +882,16 @@ class Automation extends MetadataType { } return deployable; } + /** + * helper for {@link MetadataType.updateREST} and {@link MetadataType.updateSOAP} that removes old files after the key was changed + * + * @private + * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry + * @returns {void} + */ + static async _postChangeKeyTasks(metadataEntry) { + super._postChangeKeyTasks(metadataEntry, true); + } /** * Gets executed after deployment of metadata type @@ -642,21 +902,53 @@ class Automation extends MetadataType { */ static async postDeployTasks(metadataMap, originalMetadataMap) { for (const key in metadataMap) { + const item = metadataMap[key]; + + const oldKey = Util.changedKeysMap?.[this.definition.type]?.[key] || key; + delete Util.changedKeysMap?.[this.definition.type]?.[key]; + + if (!item.type) { + // create response does not return the type attribute + + const scheduleHelper = item.schedule || item.startSource.schedule; + + // el.type + item.type = scheduleHelper + ? 'scheduled' + : item.fileTrigger + ? 'triggered' + : undefined; + + // el.schedule.timezoneName + if (item.type === 'scheduled') { + // not existing for triggered automations + scheduleHelper.timezoneName ||= Util.inverseGet( + this.definition.timeZoneMapping, + scheduleHelper.timezoneId + ); + } + + // el.status + item.status ||= Util.inverseGet(this.definition.statusMapping, item.statusId); + } // need to put schedule on here if status is scheduled - await Automation.#scheduleAutomation(metadataMap, originalMetadataMap, key); + await Automation.#scheduleAutomation(metadataMap, originalMetadataMap, key, oldKey); // need to update notifications separately if there are any await Automation.#updateNotificationInfoREST(metadataMap, key); // rewrite upsert to retrieve fields - const metadata = metadataMap[key]; - if (metadata.steps) { - for (const step of metadata.steps) { + if (item.steps) { + for (const step of item.steps) { step.name = step.annotation; delete step.annotation; } } } + if (Util.OPTIONS.execute || Util.OPTIONS.schedule) { + Util.logger.info(`Executing: ${this.definition.type}`); + await this.execute(Object.keys(metadataMap)); + } } /** * helper for {@link Automation.postDeployTasks} @@ -706,22 +998,26 @@ class Automation extends MetadataType { } /** - * helper for {@link postDeployTasks} + * helper for {@link Automation.postDeployTasks} * * @param {TYPE.AutomationMap} metadataMap metadata mapped by their keyField * @param {TYPE.AutomationMap} originalMetadataMap metadata to be updated (contains additioanl fields) * @param {string} key current customer key + * @param {string} [oldKey] old customer key before fixKey / changeKeyValue / changeKeyField + * @returns {Promise.<{key:string, response:object}>} metadata key and API response */ - static async #scheduleAutomation(metadataMap, originalMetadataMap, key) { - if (originalMetadataMap[key]?.type === 'scheduled') { + static async #scheduleAutomation(metadataMap, originalMetadataMap, key, oldKey) { + let response = null; + oldKey ||= key; + if (originalMetadataMap[oldKey]?.type === 'scheduled') { // Starting Source == 'Schedule': Try starting the automation - if (originalMetadataMap[key].status === 'Scheduled') { + if (originalMetadataMap[oldKey].status === 'Scheduled') { let schedule = null; try { - schedule = this._buildSchedule(originalMetadataMap[key].schedule); + schedule = this._buildSchedule(originalMetadataMap[oldKey].schedule); } catch (ex) { Util.logger.error( - `- Could not create schedule for automation '${originalMetadataMap[key].name}' to start it: ${ex.message}` + `- Could not create schedule for automation '${originalMetadataMap[oldKey].name}' to start it: ${ex.message}` ); } if (schedule !== null) { @@ -734,12 +1030,12 @@ class Automation extends MetadataType { const schedule_timezoneString = schedule._timezoneString; delete schedule._timezoneString; // start the automation - await this.client.soap.schedule( + response = await this.client.soap.schedule( 'Automation', schedule, { Interaction: { - ObjectID: metadataMap[key].id, + ObjectID: metadataMap[key][this.definition.idField], }, }, 'start', @@ -753,21 +1049,22 @@ class Automation extends MetadataType { (schedule_interval > 1 ? 's' : '')); Util.logger.warn( ` - scheduled automation '${ - originalMetadataMap[key].name + originalMetadataMap[oldKey].name }' deployed as Active: runs every ${intervalString} starting ${ schedule_StartDateTime.split('T').join(' ').split('.')[0] } ${schedule_timezoneString}` ); - } catch (ex) { + } catch { + // API does not return anything usefull here. We have to know the rules instead Util.logger.error( - `- Could not start scheduled automation '${originalMetadataMap[key].name}': ${ex.message}` + ` ☇ error starting scheduled ${this.definition.type}${key}: Please check schedule settings` ); } } } else { Util.logger.info( Util.getGrayMsg( - ` - scheduled automation '${originalMetadataMap[key].name}' deployed as Paused` + ` - scheduled automation '${originalMetadataMap[oldKey].name}' deployed as Paused` ) ); } @@ -781,6 +1078,7 @@ class Automation extends MetadataType { metadataMap[key].schedule.typeId = metadataMap[key].schedule.scheduleTypeId; delete metadataMap[key].schedule.scheduleTypeId; } + return { key, response }; } /** @@ -867,6 +1165,9 @@ class Automation extends MetadataType { const a = obj.split('='); recurHelper[a[0]] = a[1]; } + if (recurHelper.INTERVAL) { + recurHelper.INTERVAL = Number.parseInt(recurHelper.INTERVAL); + } // the ical schedule is all in caps but soap objects require Title Case. const keyStem = recurHelper.FREQ.charAt(0) + recurHelper.FREQ.slice(1, -2).toLowerCase(); @@ -895,13 +1196,18 @@ class Automation extends MetadataType { 'Scheduling automatically not supported for Weekly, Monthly and Yearly, please configure manually.' ); } + if (recurHelper.FREQ === 'MINUTELY' && recurHelper.INTERVAL && recurHelper.INTERVAL < 5) { + throw new Error( + 'The smallest interval you can configure is 5 minutes. Please adjust your schedule.' + ); + } if (this.definition.timeZoneMapping[scheduleObject.timezoneName]) { scheduleObject.timezoneId = this.definition.timeZoneMapping[scheduleObject.timezoneName]; } else { - Util.logger.error( - `- Could not find timezone ${scheduleObject.timezoneName} in definition.timeZoneMapping` + throw new Error( + `Could not find timezone ${scheduleObject.timezoneName} in definition.timeZoneMapping` ); } schedule.TimeZone.ID = scheduleObject.timezoneId; @@ -995,8 +1301,8 @@ class Automation extends MetadataType { // create new Date object reflecting SFMC's servertime const dateServer = new Date(utc + 3600000 * offsetServer); - // return time as a string without trailing "Z" - return dateServer.toISOString().slice(0, -1); + // return time as a string without trailing "Z" and without miliseconds (separated by .) + return dateServer.toISOString().slice(0, -1).split('.')[0]; } /** * Experimental: Only working for DataExtensions: @@ -1023,7 +1329,7 @@ class Automation extends MetadataType { const automationType = { scheduled: 'Schedule', triggered: 'File Drop' }; output += `**Started by:** ${automationType[json.type] || 'Not defined'}\n\n`; output += `**Status:** ${json.status}\n\n`; - if (json.type === 'scheduled') { + if (json.type === 'scheduled' || json.schedule) { const tz = this.definition.timeZoneDifference[ this.definition.timeZoneMapping[json?.schedule?.timezoneName] @@ -1033,7 +1339,7 @@ class Automation extends MetadataType { output += `**Schedule:**\n\n`; output += `* Start: ${json.schedule.startDate.split('T').join(' ')} ${tz}\n`; output += `* End: ${json.schedule.endDate.split('T').join(' ')} ${tz}\n`; - output += `* Timezone: ${json.schedule.timezoneName}\n`; + output += `* Timezone: ${json.schedule.timezoneName}\n`; const ical = {}; for (const item of json.schedule.icalRecur.split(';')) { @@ -1042,9 +1348,20 @@ class Automation extends MetadataType { } const frequency = ical.FREQ.slice(0, -2).toLowerCase(); - output += `* Recurrance: every ${ical.INTERVAL > 1 ? ical.INTERVAL : ''} ${ - frequency === 'dai' ? 'day' : frequency - }${ical.INTERVAL > 1 ? 's' : ''} ${ical.COUNT ? `for ${ical.COUNT} times` : ''}\n`; + output += `* Recurrance: `; + output += + ical.COUNT == 1 + ? 'run only once' + : `every${ical.INTERVAL > 1 ? ' ' + ical.INTERVAL : ''} ${ + frequency === 'dai' ? 'day' : frequency + }${ical.INTERVAL > 1 ? 's' : ''}${ + ical.COUNT + ? ` for ${ical.COUNT} times` + : ical.UNTIL + ? ' until end date' + : '' + }`; + output += '\n'; } else if (json.schedule) { output += `**Schedule:** Not defined\n`; } @@ -1224,7 +1541,7 @@ class Automation extends MetadataType { * @param {string} key customer key * @returns {Promise.} objectId or enpty string */ - static async _getObjectIdForSingleRetrieve(key) { + static async #getObjectIdForSingleRetrieve(key) { const response = await this.client.soap.retrieve('Program', ['ObjectID'], { filter: { leftOperand: 'CustomerKey', @@ -1243,7 +1560,7 @@ class Automation extends MetadataType { */ static async deleteByKey(customerKey) { // the delete endpoint returns a general exception if the automation does not exist; handle it gracefully instead by adding a retrieve first - const objectId = customerKey ? await this._getObjectIdForSingleRetrieve(customerKey) : null; + const objectId = customerKey ? await this.#getObjectIdForSingleRetrieve(customerKey) : null; if (!objectId) { Util.logger.error(` - automation not found`); return false; diff --git a/lib/metadataTypes/DataExtension.js b/lib/metadataTypes/DataExtension.js index 43e9dcfc8..7210095a6 100644 --- a/lib/metadataTypes/DataExtension.js +++ b/lib/metadataTypes/DataExtension.js @@ -203,7 +203,7 @@ class DataExtension extends MetadataType { } } /** - * helper for {@link upsert} + * helper for {@link DataExtension.upsert} * * @private * @param {object} res - @@ -607,7 +607,7 @@ class DataExtension extends MetadataType { metadata[customerKey].Fields = fieldArr; } /** - * helper for {@link super.updateREST} and {@link super.updateSOAP} that removes old files after the key was changed + * helper for {@link MetadataType.updateREST} and {@link MetadataType.updateSOAP} that removes old files after the key was changed * * @private * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry diff --git a/lib/metadataTypes/DataExtensionField.js b/lib/metadataTypes/DataExtensionField.js index 61b68d642..7af1ab604 100644 --- a/lib/metadataTypes/DataExtensionField.js +++ b/lib/metadataTypes/DataExtensionField.js @@ -31,7 +31,7 @@ class DataExtensionField extends MetadataType { return super.retrieveSOAP(null, requestParams, null, additionalFields); } /** - * helper for {@link DataExtension._retrieveFieldsForSingleDe} that sorts the fields into an array + * helper for DataExtension.retrieveFieldsForSingleDe that sorts the fields into an array * * @param {TYPE.DataExtensionFieldMap} fieldsObj customerKey-based list of fields for one dataExtension * @returns {TYPE.DataExtensionFieldItem[]} sorted array of field objects diff --git a/lib/metadataTypes/Event.js b/lib/metadataTypes/Event.js index 3062acfd4..864cd925c 100644 --- a/lib/metadataTypes/Event.js +++ b/lib/metadataTypes/Event.js @@ -136,12 +136,11 @@ class Event extends MetadataType { * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved * @param {string} retrieveDir directory where metadata after deploy should be saved - * @param {boolean} [isRefresh] optional flag - so far not used by eventDefinition * @returns {Promise.} Promise of keyField => metadata map */ - static async deploy(metadata, deployDir, retrieveDir, isRefresh) { + static async deploy(metadata, deployDir, retrieveDir) { Util.logBeta(this.definition.type); - return super.deploy(metadata, deployDir, retrieveDir, isRefresh); + return super.deploy(metadata, deployDir, retrieveDir); } /** diff --git a/lib/metadataTypes/Folder.js b/lib/metadataTypes/Folder.js index e1f691873..829800112 100644 --- a/lib/metadataTypes/Folder.js +++ b/lib/metadataTypes/Folder.js @@ -452,7 +452,7 @@ class Folder extends MetadataType { * Returns file contents mapped to their filename without '.json' ending * * @param {string} dir directory that contains '.json' files to be read - * @param {boolean} [listBadKeys=false] do not print errors, used for badKeys() + * @param {boolean} [listBadKeys] do not print errors, used for badKeys() * @returns {TYPE.MetadataTypeMap} fileName => fileContent map */ static getJsonFromFS(dir, listBadKeys) { diff --git a/lib/metadataTypes/Journey.js b/lib/metadataTypes/Journey.js index 7c20b2ee3..1719dfe47 100644 --- a/lib/metadataTypes/Journey.js +++ b/lib/metadataTypes/Journey.js @@ -216,12 +216,11 @@ class Journey extends MetadataType { * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved * @param {string} retrieveDir directory where metadata after deploy should be saved - * @param {boolean} [isRefresh] optional flag - so far not used by interaction * @returns {Promise.} Promise of keyField => metadata map */ - static async deploy(metadata, deployDir, retrieveDir, isRefresh) { + static async deploy(metadata, deployDir, retrieveDir) { Util.logBeta(this.definition.type); - return super.deploy(metadata, deployDir, retrieveDir, isRefresh); + return super.deploy(metadata, deployDir, retrieveDir); } /** @@ -265,7 +264,7 @@ class Journey extends MetadataType { } /** - * helper for Journey's {@link saveResults}. Gets executed after retreive of metadata type and + * helper for Journey's {@link Journey.saveResults}. Gets executed after retreive of metadata type and * * @param {TYPE.MetadataTypeMap} metadataMap key=customer key, value=metadata */ @@ -478,7 +477,7 @@ class Journey extends MetadataType { return metadata; } /** - * helper for {@link postRetrieveTasks} + * helper for {@link Journey.postRetrieveTasks} * * @private * @param {TYPE.MetadataTypeItem} metadata a single item @@ -800,7 +799,7 @@ class Journey extends MetadataType { } /** - * helper for {@link preDeployTasks} + * helper for {@link Journey.preDeployTasks} * * @private * @param {TYPE.MetadataTypeItem} metadata a single item diff --git a/lib/metadataTypes/MetadataType.js b/lib/metadataTypes/MetadataType.js index 92b1686de..36f5f52bc 100644 --- a/lib/metadataTypes/MetadataType.js +++ b/lib/metadataTypes/MetadataType.js @@ -35,7 +35,7 @@ class MetadataType { * Returns file contents mapped to their filename without '.json' ending * * @param {string} dir directory that contains '.json' files to be read - * @param {boolean} [listBadKeys=false] do not print errors, used for badKeys() + * @param {boolean} [listBadKeys] do not print errors, used for badKeys() * @returns {TYPE.MetadataTypeMap} fileName => fileContent map */ static getJsonFromFS(dir, listBadKeys) { @@ -108,11 +108,10 @@ class MetadataType { * @param {TYPE.MetadataTypeMap} metadata metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved * @param {string} retrieveDir directory where metadata after deploy should be saved - * @param {boolean} [isRefresh] optional flag to indicate that triggeredSend should be refreshed after deployment of assets * @returns {Promise.} Promise of keyField => metadata map */ - static async deploy(metadata, deployDir, retrieveDir, isRefresh) { - const upsertResults = await this.upsert(metadata, deployDir, isRefresh); + static async deploy(metadata, deployDir, retrieveDir) { + const upsertResults = await this.upsert(metadata, deployDir); const savedMetadata = await this.saveResults(upsertResults, retrieveDir, null); if ( this.properties.metaDataTypes.documentOnRetrieve.includes(this.definition.type) && @@ -131,13 +130,12 @@ class MetadataType { * @param {TYPE.MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create * @param {TYPE.MetadataTypeMap} originalMetadata metadata to be updated (contains additioanl fields) * @param {{created: number, updated: number}} createdUpdated counter representing successful creates/updates - * @param {boolean} [isRefresh] optional flag to indicate that triggeredSend should be refreshed after deployment of assets * @returns {void} */ - static postDeployTasks(upsertResults, originalMetadata, createdUpdated, isRefresh) {} + static postDeployTasks(upsertResults, originalMetadata, createdUpdated) {} /** - * helper for {@link createREST} + * helper for {@link MetadataType.createREST} * * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call @@ -146,7 +144,7 @@ class MetadataType { static postCreateTasks(metadataEntry, apiResponse) {} /** - * helper for {@link updateREST} + * helper for {@link MetadataType.updateREST} * * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call @@ -155,7 +153,7 @@ class MetadataType { static postUpdateTasks(metadataEntry, apiResponse) {} /** - * helper for {@link createREST} when legacy API endpoints as these do not return the created item but only their new id + * helper for {@link MetadataType.createREST} when legacy API endpoints as these do not return the created item but only their new id * * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call @@ -463,7 +461,18 @@ class MetadataType { Util.logger.error( ` ☇ skipping ${this.definition.type}: execute is not supported yet for ${this.definition.type}` ); - return; + return []; + } + /** + * Abstract pause method that needs to be implemented in child metadata type + * + * @returns {void} + */ + static pause() { + Util.logger.error( + ` ☇ skipping ${this.definition.type}: pause is not supported yet for ${this.definition.type}` + ); + return []; } /** @@ -537,10 +546,9 @@ class MetadataType { * * @param {TYPE.MetadataTypeMap} metadataMap metadata mapped by their keyField * @param {string} deployDir directory where deploy metadata are saved - * @param {boolean} [isRefresh] optional flag to indicate that triggeredSend should be refreshed after deployment of assets * @returns {Promise.} keyField => metadata map */ - static async upsert(metadataMap, deployDir, isRefresh) { + static async upsert(metadataMap, deployDir) { const orignalMetadataMap = JSON.parse(JSON.stringify(metadataMap)); const metadataToUpdate = []; const metadataToCreate = []; @@ -632,12 +640,10 @@ class MetadataType { const metadataResults = createResults.concat(updateResults).filter(Boolean); upsertResults = this.parseResponseBody(metadataResults); } - await this.postDeployTasks( - upsertResults, - orignalMetadataMap, - { created: createResults.length, updated: updateResults.length }, - isRefresh - ); + await this.postDeployTasks(upsertResults, orignalMetadataMap, { + created: createResults.length, + updated: updateResults.length, + }); return upsertResults; } @@ -815,7 +821,7 @@ class MetadataType { ); return response; } catch (ex) { - const parsedErrors = this.checkForErrors(ex); + const parsedErrors = this.getErrorsREST(ex); Util.logger.error( ` ☇ error creating ${this.definition.type} ${ metadataEntry[this.definition.keyField] || @@ -845,7 +851,7 @@ class MetadataType { this.removeNotCreateableFields(metadataEntry); try { const response = await this.client.soap.create( - soapType.charAt(0).toUpperCase() + soapType.slice(1), + Util.capitalizeFirstLetter(soapType), metadataEntry, null ); @@ -869,7 +875,7 @@ class MetadataType { * * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry * @param {string} uri rest endpoint for PATCH - * @param {'patch'|'post'|'put'} [httpMethod='patch'] defaults to 'patch'; some update requests require PUT instead of PATCH + * @param {'patch'|'post'|'put'} [httpMethod] defaults to 'patch'; some update requests require PUT instead of PATCH * @returns {Promise. | null} Promise of API response or null in case of an error */ static async updateREST(metadataEntry, uri, httpMethod = 'patch') { @@ -878,7 +884,7 @@ class MetadataType { // set to empty object in case API returned nothing to be able to update it in helper classes const response = (await this.client.rest[httpMethod](uri, metadataEntry)) || {}; await this._postChangeKeyTasks(metadataEntry); - this.checkForErrors(response); + this.getErrorsREST(response); await this.postUpdateTasks(metadataEntry, response); // some times, e.g. automation dont return a key in their update response and hence we need to fall back to name Util.logger.info( @@ -889,7 +895,7 @@ class MetadataType { ); return response; } catch (ex) { - const parsedErrors = this.checkForErrors(ex); + const parsedErrors = this.getErrorsREST(ex); Util.logger.error( ` ☇ error updating ${this.definition.type} ${ metadataEntry[this.definition.keyField] || @@ -904,7 +910,7 @@ class MetadataType { } /** - * helper for {@link updateREST} and {@link updateSOAP} that removes old files after the key was changed + * helper for {@link MetadataType.updateREST} and {@link MetadataType.updateSOAP} that removes old files after the key was changed * * @private * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry @@ -950,7 +956,7 @@ class MetadataType { this.removeNotUpdateableFields(metadataEntry); try { const response = await this.client.soap.update( - soapType.charAt(0).toUpperCase() + soapType.slice(1), + Util.capitalizeFirstLetter(soapType), metadataEntry, null ); @@ -985,15 +991,20 @@ class MetadataType { } } /** - * helper for {@link _handleSOAPErrors} + * helper for {@link MetadataType._handleSOAPErrors} * * @param {Error} ex error that occured * @returns {string} error message */ static getSOAPErrorMsg(ex) { - return ex?.json?.Results?.length - ? `${ex.json.Results[0].StatusMessage} (Code ${ex.json.Results[0].ErrorCode})` - : ex.message; + if (ex?.json?.Results?.length) { + if (ex?.json?.Results[0].StatusMessage) { + return `${ex.json.Results[0].StatusMessage} (Code ${ex.json.Results[0].ErrorCode})`; + } else if (ex?.json?.Results[0].Result.StatusMessage) { + return `${ex.json.Results[0].Result.StatusMessage} (Code ${ex.json.Results[0].Result.ErrorCode})`; + } + } + return ex.message; } /** * Retrieves SOAP via generic fuel-soap wrapper based metadata of metadata type into local filesystem. executes callback with retrieved metadata @@ -1010,7 +1021,11 @@ class MetadataType { const soapType = this.definition.soapType || this.definition.type; let response; try { - response = await this.client.soap.retrieveBulk(soapType, fields, requestParams); + response = await this.client.soap.retrieveBulk( + Util.capitalizeFirstLetter(soapType), + fields, + requestParams + ); } catch (ex) { this._handleSOAPErrors(ex, 'retrieving'); return {}; @@ -1078,24 +1093,56 @@ class MetadataType { * * @param {string} uri REST endpoint where the POST request should be sent * @param {string} key item key - * @returns {Promise.} 'OK' if started execution successfully, otherwise - 'Error' + * @returns {Promise.<{key:string, response:string}>} metadata key and API response (OK or error) */ static async executeREST(uri, key) { try { const response = await this.client.rest.post(uri, {}); // payload is empty for this request if (response === 'OK') { - Util.logger.info(`Executed ${this.definition.type}: ${key}`); + Util.logger.info(` - executed ${this.definition.type}: ${key}`); } else { throw new Error(response); } - return response; + return { key, response }; } catch (ex) { Util.logger.error(`Failed to execute ${this.definition.type} ${key}: ${ex.message}`); } } /** - * helper for {@link retrieveREST} and {@link retrieveSOAP} + * Used to execute a query/automation etc. + * + * @param {TYPE.MetadataTypeItem} [metadataEntry] single metadata entry + * @returns {Promise.<{key:string, response:object}>} metadata key and API response + */ + static async executeSOAP(metadataEntry) { + const soapType = this.definition.soapType || this.definition.type; + try { + const response = await this.client.soap.perform( + Util.capitalizeFirstLetter(soapType), + 'start', + { + ObjectID: metadataEntry[this.definition.idField], + } + ); + if (response?.OverallStatus === 'OK') { + Util.logger.info( + ` - executed ${this.definition.type}: ${ + metadataEntry[this.definition.keyField] + }` + ); + } else { + throw new Error(response?.OverallStatus); + } + return { key: metadataEntry[this.definition.keyField], response }; + } catch (ex) { + this._handleSOAPErrors(ex, 'executing', metadataEntry); + return null; + } + } + + /** + * helper for {@link MetadataType.retrieveREST} and {@link MetadataType.retrieveSOAP} * * @param {string|number} [singleRetrieve] key of single item to filter by * @param {TYPE.MetadataTypeMap} metadataMap saved metadata @@ -1298,7 +1345,7 @@ class MetadataType { * * @static * @param {TYPE.MetadataTypeItem} metadataEntry metadata entry - * @param {boolean} [include=false] true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude + * @param {boolean} [include] true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude * @returns {boolean} true: skip saving == filtered; false: continue with saving * @memberof MetadataType */ @@ -1343,7 +1390,7 @@ class MetadataType { * * @static * @param {object} metadataEntry metadata entry - * @param {boolean} [include=false] true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude + * @param {boolean} [include] true: use definition.include / options.include; false=exclude: use definition.filter / options.exclude * @returns {boolean} true: filtered == do NOT save; false: not filtered == do save * @memberof MetadataType */ @@ -1575,6 +1622,10 @@ class MetadataType { } } + if (Util.OPTIONS.like && !Util.fieldsLike(results[originalKey])) { + Util.logger.debug(`Filtered ${originalKey} because of --like option`); + continue; + } // we dont store Id on local disk, but we need it for caching logic, // so its in retrieve but not in save. Here we put into the clone so that the original // object used for caching doesnt have the Id removed. @@ -1621,7 +1672,7 @@ class MetadataType { return savedResults; } /** - * helper for {@link buildDefinitionForNested} + * helper for {@link MetadataType.buildDefinitionForNested} * searches extracted file for template variable names and applies the market values * * @param {string} code code from extracted code @@ -1633,7 +1684,7 @@ class MetadataType { return Mustache.render(code, templateVariables, {}, ['{{{', '}}}']); } /** - * helper for {@link buildTemplateForNested} + * helper for {@link MetadataType.buildTemplateForNested} * searches extracted file for template variable values and applies the market variable names * * @param {string} code code from extracted code @@ -1645,7 +1696,7 @@ class MetadataType { return Util.replaceByObject(code, templateVariables); } /** - * helper for {@link buildDefinition} + * helper for {@link MetadataType.buildDefinition} * handles extracted code if any are found for complex types (e.g script, asset, query) * * @param {string} templateDir Directory where metadata templates are stored @@ -1666,7 +1717,7 @@ class MetadataType { return null; } /** - * helper for {@link buildTemplate} + * helper for {@link MetadataType.buildTemplate} * handles extracted code if any are found for complex types * * @param {string} templateDir Directory where metadata templates are stored @@ -1812,7 +1863,7 @@ class MetadataType { * @param {object} ex response payload from REST API * @returns {string[] | void} formatted Error Message */ - static checkForErrors(ex) { + static getErrorsREST(ex) { const errors = []; if (ex?.response?.status >= 400 && ex?.response?.status < 600) { if (ex.response.data.errors) { @@ -1835,11 +1886,13 @@ class MetadataType { } } else if (ex.response.data.message) { errors.push(ex.response.data.message); - } else { + } else if (ex.response.data) { errors.push(`Undefined Errors: ${JSON.stringify(ex.response.data)}`); + Util.logger.debug(JSON.stringify(ex.response.data)); + } else { + errors.push(`${ex.response.status} ${ex.response.statusText}`); } Util.logger.debug(JSON.stringify(ex.config)); - Util.logger.debug(JSON.stringify(ex.response.data)); } return errors; } @@ -1902,11 +1955,7 @@ class MetadataType { metadata[overrideKeyField || this.definition.keyField] = customerKey; const soapType = this.definition.soapType || this.definition.type; try { - await this.client.soap.delete( - soapType.charAt(0).toUpperCase() + soapType.slice(1), - metadata, - null - ); + await this.client.soap.delete(Util.capitalizeFirstLetter(soapType), metadata, null); if (!handleOutside) { Util.logger.info(` - deleted ${this.definition.type}: ${customerKey}`); } @@ -1959,7 +2008,7 @@ class MetadataType { * Returns metadata of a business unit that is saved locally * * @param {string} readDir root directory of metadata. - * @param {boolean} [listBadKeys=false] do not print errors, used for badKeys() + * @param {boolean} [listBadKeys] do not print errors, used for badKeys() * @param {object} [buMetadata] Metadata of BU in local directory * @returns {object} Metadata of BU in local directory */ @@ -1997,6 +2046,57 @@ class MetadataType { const fileList = keyArr.map((key) => File.normalizePath([path, key + typeExtension])); return fileList; } + + /** + * + * @param {TYPE.MetadataTypeMap} metadataMap metadata mapped by their keyField + * @returns {string[]} list of keys + */ + static getKeysForFixing(metadataMap) { + const keysForDeploy = []; + if (Object.keys(metadataMap).length) { + Util.logger.info( + `Searching for ${this.definition.type} keys among downloaded items that need fixing:` + ); + for (const item of Object.values(metadataMap)) { + if (item[this.definition.nameField].length > this.definition.maxKeyLength) { + Util.logger.warn( + `Name of the item ${ + item[this.definition.keyField] + } is too long for a key. Consider renaming your item. Key will be equal first ${ + this.definition.maxKeyLength + } characters of the name` + ); + item[this.definition.nameField] = item[this.definition.nameField].slice( + 0, + this.definition.maxKeyLength + ); + } + + if ( + item[this.definition.nameField] != item[this.definition.keyField] && + !this.definition.keyIsFixed + ) { + keysForDeploy.push(item[this.definition.keyField]); + Util.logger.info( + ` - added ${this.definition.type} to fixKey queue: ${ + item[this.definition.keyField] + }` + ); + } else { + Util.logger.info( + Util.getGrayMsg( + ` ☇ skipping ${this.definition.type} ${ + item[this.definition.keyField] + }: key does not need to be updated` + ) + ); + } + } + Util.logger.info(`Found ${keysForDeploy.length} ${this.definition.type} keys to fix`); + } + return keysForDeploy; + } } MetadataType.definition = { diff --git a/lib/metadataTypes/MobileKeyword.js b/lib/metadataTypes/MobileKeyword.js index 02ade31c3..12b796bc0 100644 --- a/lib/metadataTypes/MobileKeyword.js +++ b/lib/metadataTypes/MobileKeyword.js @@ -96,7 +96,7 @@ class MobileKeyword extends MetadataType { } /** - * helper for {@link parseResponseBody} that creates a custom key field for this type based on mobileCode and keyword + * helper for {@link MobileKeyword.parseResponseBody} that creates a custom key field for this type based on mobileCode and keyword * * @private * @param {TYPE.MetadataType} metadata single item @@ -106,7 +106,7 @@ class MobileKeyword extends MetadataType { } /** - * helper for {@link preDeployTasks} and {@link createOrUpdate} to ensure we have code & keyword properly set + * helper for {@link MobileKeyword.preDeployTasks} and {@link MobileKeyword.createOrUpdate} to ensure we have code & keyword properly set * * @private * @param {TYPE.MetadataType} metadata single item @@ -192,7 +192,7 @@ class MobileKeyword extends MetadataType { } /** - * helper for {@link retrieve} and {@link retrieveAsTemplate} + * helper for {@link MobileKeyword.retrieve} and {@link MobileKeyword.retrieveAsTemplate} * * @private * @param {string} key customer key of single item to retrieve / name of the metadata file @@ -281,7 +281,7 @@ class MobileKeyword extends MetadataType { } } /** - * helper for {@link parseMetadata} and {@link _buildForNested} + * helper for {@link MobileKeyword.postRetrieveTasks} and {@link MobileKeyword._buildForNested} * * @param {string} metadataScript the code of the file * @returns {{fileExt:string,code:string}} returns found extension and file content @@ -349,7 +349,7 @@ class MobileKeyword extends MetadataType { } /** - * helper for {@link buildTemplateForNested} / {@link buildDefinitionForNested} + * helper for {@link MobileKeyword.buildTemplateForNested} / {@link MobileKeyword.buildDefinitionForNested} * handles extracted code if any are found for complex types * * @param {string} templateDir Directory where metadata templates are stored @@ -445,7 +445,7 @@ class MobileKeyword extends MetadataType { return metadata; } /** - * helper for {@link createREST} + * helper for {@link MetadataType.createREST} * * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call @@ -455,7 +455,7 @@ class MobileKeyword extends MetadataType { await super.postDeployTasks_legacyApi(metadataEntry, apiResponse); } /** - * helper for {@link updateREST} + * helper for {@link MetadataType.updateREST} * * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call @@ -466,7 +466,7 @@ class MobileKeyword extends MetadataType { } /** - * helper for {@link preDeployTasks} that loads extracted code content back into JSON + * helper for {@link MobileKeyword.preDeployTasks} that loads extracted code content back into JSON * * @param {TYPE.MetadataTypeItem} metadata a single definition * @param {string} deployDir directory of deploy files diff --git a/lib/metadataTypes/MobileMessage.js b/lib/metadataTypes/MobileMessage.js index a9a1f8227..8514b5cd0 100644 --- a/lib/metadataTypes/MobileMessage.js +++ b/lib/metadataTypes/MobileMessage.js @@ -83,7 +83,7 @@ class MobileMessage extends MetadataType { return super.createREST(metadata, '/legacy/v1/beta/mobile/message/'); } /** - * helper for {@link preDeployTasks} that loads extracted code content back into JSON + * helper for {@link MobileMessage.preDeployTasks} that loads extracted code content back into JSON * * @param {TYPE.MetadataTypeItem} metadata a single definition * @param {string} deployDir directory of deploy files @@ -110,7 +110,7 @@ class MobileMessage extends MetadataType { } } /** - * helper for {@link parseMetadata} and {@link _buildForNested} + * helper for {@link MobileMessage.postRetrieveTasks} and {@link MobileMessage._buildForNested} * * @param {string} code the code of the file * @returns {{fileExt:string,code:string}} returns found extension and file content @@ -304,7 +304,7 @@ class MobileMessage extends MetadataType { return metadata; } /** - * helper for {@link createREST} + * helper for {@link MetadataType.createREST} * * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call @@ -314,7 +314,7 @@ class MobileMessage extends MetadataType { await super.postDeployTasks_legacyApi(metadataEntry, apiResponse); } /** - * helper for {@link updateREST} + * helper for {@link MetadataType.updateREST} * * @param {TYPE.MetadataTypeItem} metadataEntry a single metadata Entry * @param {object} apiResponse varies depending on the API call @@ -380,7 +380,7 @@ class MobileMessage extends MetadataType { } /** - * helper for {@link buildTemplateForNested} / {@link buildDefinitionForNested} + * helper for {@link MobileMessage.buildTemplateForNested} / {@link MobileMessage.buildDefinitionForNested} * handles extracted code if any are found for complex types * * @param {string} templateDir Directory where metadata templates are stored diff --git a/lib/metadataTypes/Query.js b/lib/metadataTypes/Query.js index e91496131..e4b508468 100644 --- a/lib/metadataTypes/Query.js +++ b/lib/metadataTypes/Query.js @@ -38,7 +38,9 @@ class Query extends MetadataType { objectId = await this._getObjectIdForSingleRetrieve(key); if (!objectId) { // avoid running the rest request below by returning early - Util.logger.info(`Downloaded: ${this.definition.type} (0) - Key: ${key}`); + Util.logger.info( + `Downloaded: ${this.definition.type} (0)${Util.getKeysString(key)}` + ); return { metadata: {}, type: this.definition.type }; } } @@ -54,7 +56,7 @@ class Query extends MetadataType { * a function to start query execution via API * * @param {string[]} keyArr customerkey of the metadata - * @returns {Promise.} Returns true if all items were executed successfully, otherwise false + * @returns {Promise.} Returns list of keys that were executed successfully */ static async execute(keyArr) { const results = []; @@ -65,16 +67,18 @@ class Query extends MetadataType { objectId = await this._getObjectIdForSingleRetrieve(key); if (!objectId) { Util.logger.info(`Skipping ${key} - did not find an item with such key`); - break; + continue; } } results.push( super.executeREST(`/automation/v1/queries/${objectId}/actions/start/`, key) ); } - const successCounter = (await Promise.all(results)).filter((r) => r === 'OK').length; - Util.logger.info(`Executed ${successCounter} of ${keyArr.length} items`); - return successCounter === keyArr.length; + const executedKeyArr = (await Promise.all(results)) + .filter((r) => r.response === 'OK') + .map((r) => r.key); + Util.logger.info(`Executed ${executedKeyArr.length} of ${keyArr.length} items`); + return executedKeyArr; } /** * helper to allow us to select single metadata entries via REST @@ -250,7 +254,7 @@ class Query extends MetadataType { return metadata; } /** - * helper for {@link buildDefinitionForNested} + * helper for {@link Query.buildDefinitionForNested} * searches extracted SQL file for template variables and applies the market values * * @param {string} code code from extracted code @@ -328,7 +332,7 @@ class Query extends MetadataType { ); } /** - * helper for {@link buildTemplateForNested} / {@link buildDefinitionForNested} + * helper for {@link Query.buildTemplateForNested} / {@link Query.buildDefinitionForNested} * handles extracted code if any are found for complex types * * @private @@ -420,11 +424,12 @@ class Query extends MetadataType { * @param {object} ex response payload from REST API * @returns {string[] | void} formatted Error Message */ - static checkForErrors(ex) { - const errors = super.checkForErrors(ex); + static getErrorsREST(ex) { + const errors = super.getErrorsREST(ex); if (errors?.length > 0) { return errors.map((msg) => msg.split('Error saving the Query field.').join('')); } + return errors; } /** * Delete a metadata item from the specified business unit @@ -452,6 +457,17 @@ class Query extends MetadataType { // delete local copy: retrieve/cred/bu/.../...-meta.sql await super.postDeleteTasks(customerKey, [`${this.definition.type}-meta.sql`]); } + /** + * Gets executed after deployment of metadata type + * + * @param {TYPE.MetadataTypeMap} upsertResults metadata mapped by their keyField as returned by update/create + */ + static async postDeployTasks(upsertResults) { + if (Util.OPTIONS.execute) { + Util.logger.info(`Executing: ${this.definition.type}`); + await this.execute(Object.keys(upsertResults)); + } + } } // Assign definition & cache to static attributes diff --git a/lib/metadataTypes/Script.js b/lib/metadataTypes/Script.js index aec027bfb..1f33b1c1f 100644 --- a/lib/metadataTypes/Script.js +++ b/lib/metadataTypes/Script.js @@ -82,7 +82,7 @@ class Script extends MetadataType { } /** - * helper for {@link preDeployTasks} that loads extracted code content back into JSON + * helper for {@link Script.preDeployTasks} that loads extracted code content back into JSON * * @param {TYPE.ScriptItem} metadata a single asset definition * @param {string} deployDir directory of deploy files @@ -189,7 +189,7 @@ class Script extends MetadataType { } /** - * helper for {@link buildTemplateForNested} / {@link buildDefinitionForNested} + * helper for {@link Script.buildTemplateForNested} / {@link Script.buildDefinitionForNested} * handles extracted code if any are found for complex types * * @param {string} templateDir Directory where metadata templates are stored @@ -279,7 +279,7 @@ class Script extends MetadataType { return { json: metadata, codeArr: codeArr, subFolder: null }; } /** - * helper for {@link parseMetadata} and {@link _buildForNested} + * helper for {@link Script.parseMetadata} and {@link Script._buildForNested} * * @param {string} metadataScript the code of the file * @param {string} metadataName the name of the metadata diff --git a/lib/metadataTypes/SetDefinition.js b/lib/metadataTypes/SetDefinition.js deleted file mode 100644 index 551320874..000000000 --- a/lib/metadataTypes/SetDefinition.js +++ /dev/null @@ -1,37 +0,0 @@ -'use strict'; - -const TYPE = require('../../types/mcdev.d'); -const MetadataType = require('./MetadataType'); - -/** - * SetDefinition MetadataType - * - * @augments MetadataType - */ -class SetDefinition extends MetadataType { - /** - * Retrieves Metadata of schema set Definitions. - * - * @param {string} retrieveDir Directory where retrieved metadata directory will be saved - * @param {void} [_] unused parameter - * @param {void} [__] unused parameter - * @param {string} [key] customer key of single item to retrieve - * @returns {Promise.} Promise - */ - static retrieve(retrieveDir, _, __, key) { - return super.retrieveREST(retrieveDir, '/hub/v1/contacts/schema/setDefinitions', null, key); - } - /** - * Retrieves Metadata of schema set definitions for caching. - * - * @returns {Promise.} Promise - */ - static retrieveForCache() { - return super.retrieveREST(null, '/hub/v1/contacts/schema/setDefinitions'); - } -} - -// Assign definition to static attributes -SetDefinition.definition = require('../MetadataTypeDefinitions').setDefinition; - -module.exports = SetDefinition; diff --git a/lib/metadataTypes/TransactionalSMS.js b/lib/metadataTypes/TransactionalSMS.js index 4e9bfb3db..dd568c10c 100644 --- a/lib/metadataTypes/TransactionalSMS.js +++ b/lib/metadataTypes/TransactionalSMS.js @@ -66,7 +66,7 @@ class TransactionalSMS extends TransactionalMessage { return metadata; } /** - * helper for {@link preDeployTasks} that loads extracted code content back into JSON + * helper for {@link TransactionalSMS.preDeployTasks} that loads extracted code content back into JSON * * @param {TYPE.MetadataTypeItem} metadata a single definition * @param {string} deployDir directory of deploy files @@ -158,7 +158,7 @@ class TransactionalSMS extends TransactionalMessage { return { json: metadata, codeArr: codeArr, subFolder: null }; } /** - * helper for {@link parseMetadata} and {@link _buildForNested} + * helper for {@link TransactionalSMS.postRetrieveTasks} and {@link TransactionalSMS._buildForNested} * * @param {string} metadataScript the code of the file * @returns {{fileExt:string,code:string}} returns found extension and file content @@ -189,7 +189,7 @@ class TransactionalSMS extends TransactionalMessage { return { fileExt, code }; } /** - * helper for {@link MetadataType.buildDefinition} + * helper for {@link TransactionalMessage.buildDefinition} * handles extracted code if any are found for complex types * * @param {string} templateDir Directory where metadata templates are stored @@ -216,7 +216,7 @@ class TransactionalSMS extends TransactionalMessage { ); } /** - * helper for {@link MetadataType.buildTemplate} + * helper for {@link TransactionalMessage.buildTemplate} * handles extracted code if any are found for complex types * * @example scripts are saved as 1 json and 1 ssjs file. both files need to be run through templating @@ -245,7 +245,7 @@ class TransactionalSMS extends TransactionalMessage { } /** - * helper for {@link buildTemplateForNested} / {@link buildDefinitionForNested} + * helper for {@link TransactionalSMS.buildTemplateForNested} / {@link TransactionalSMS.buildDefinitionForNested} * handles extracted code if any are found for complex types * * @param {string} templateDir Directory where metadata templates are stored diff --git a/lib/metadataTypes/TriggeredSend.js b/lib/metadataTypes/TriggeredSend.js index 26b3ca33d..6d31ff6ea 100644 --- a/lib/metadataTypes/TriggeredSend.js +++ b/lib/metadataTypes/TriggeredSend.js @@ -85,51 +85,19 @@ class TriggeredSend extends MetadataType { return super.deleteByKeySOAP(customerKey); } - /** - * manages post retrieve steps - * - * @param {TYPE.MetadataTypeItem} metadata a single query - * @returns {TYPE.MetadataTypeItem} Array with one metadata object and one query string - */ - static postRetrieveTasks(metadata) { - return this.parseMetadata(metadata); - } - /** - * generic script that retrieves the folder path from cache and updates the given metadata with it after retrieve - * - * @param {TYPE.MetadataTypeItem} metadata a single script activity definition - */ - static setFolderPath(metadata) { - try { - metadata.r__folder_Path = cache.searchForField( - 'folder', - metadata[this.definition.folderIdField], - 'ID', - 'Path' - ); - delete metadata[this.definition.folderIdField]; - } catch (ex) { - Util.logger.verbose( - ` - skipping ${this.definition.type} '${metadata[this.definition.nameField]}' (${ - metadata[this.definition.keyField] - }): Could not find folder (${ex.message})` - ); - throw ex; - } - } /** * parses retrieved Metadata before saving * - * @param {TYPE.MetadataTypeItem} metadata a single query activity definition + * @param {TYPE.MetadataTypeItem} metadata a single item * @returns {TYPE.MetadataTypeItem | void} Array with one metadata object and one sql string */ - static parseMetadata(metadata) { + static postRetrieveTasks(metadata) { // remove IsPlatformObject, always has to be 'false' delete metadata.IsPlatformObject; + // folder - try { - this.setFolderPath(metadata); - } catch { + this.setFolderPath(metadata); + if (!metadata.r__folder_Path) { Util.logger.verbose( ` ☇ skipping ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find folder.` ); @@ -163,7 +131,7 @@ class TriggeredSend extends MetadataType { delete metadata.Email; } catch { Util.logger.verbose( - ` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find email with ID ${metadata.Email.ID} in Classic nor in Content Builder. This TSD cannot be replublished but potentially restarted with its cached version of the email.` + ` - ${this.definition.typeName} '${metadata.Name}'/'${metadata.CustomerKey}': Could not find email with ID ${metadata.Email.ID} in Classic nor in Content Builder. This TSD cannot be republished but potentially restarted with its cached version of the email.` ); // save this TSD because it could be fixed by the user or potentially restarted without a fix; also, it might be used by a journey } @@ -246,7 +214,7 @@ class TriggeredSend extends MetadataType { * TSD-specific refresh method that finds active TSDs and refreshes them * * @param {string[]} [keyArr] metadata keys - * @param {boolean} [checkKey=true] whether to check if the key is valid + * @param {boolean} [checkKey] whether to check if the key is valid * @returns {Promise.} - */ static async refresh(keyArr, checkKey = true) { @@ -268,7 +236,7 @@ class TriggeredSend extends MetadataType { } /** - * helper for {@link refresh} that extracts the keys from the TSD item map and eli + * helper for {@link TriggeredSend.refresh} that extracts the keys from the TSD item map and eli * * @param {TYPE.MetadataTypeMapObj} metadata TSD item map * @returns {Promise.} keyArr @@ -282,11 +250,12 @@ class TriggeredSend extends MetadataType { return keyArr; } /** - * helper for {@link refresh} that finds active TSDs on the server and filters it by the same rules that {@link retrieve} is using to avoid refreshing TSDs with broken dependencies + * helper for {@link TriggeredSend.refresh} that finds active TSDs on the server and filters it by the same rules that {@link TriggeredSend.retrieve} is using to avoid refreshing TSDs with broken dependencies * + * @param {boolean} [assetLoaded] if run after Asset.deploy via --refresh option this will skip caching assets * @returns {Promise.} Promise of TSD item map */ - static async findRefreshableItems() { + static async findRefreshableItems(assetLoaded = false) { Util.logger.info('Finding refreshable items...'); // cache dependencies to test for broken links // skip deprecated classic emails here, assuming they cannot be updated and hence are not relevant for {@link refresh} @@ -305,14 +274,20 @@ class TriggeredSend extends MetadataType { list: null, }; for (const [type, subTypeArr] of Object.entries(requiredCache)) { - if (!cache.getCache()?.[type]) { - Util.logger.info(` - Caching dependent Metadata: ${type}`); - Util.logSubtypes(subTypeArr); - cacheTypes[type].client = this.client; - cacheTypes[type].buObject = this.buObject; - cacheTypes[type].properties = this.properties; + if (type === 'asset' && assetLoaded) { + continue; + } + Util.logger.info(` - Caching dependent Metadata: ${type}`); + Util.logSubtypes(subTypeArr); + cacheTypes[type].client = this.client; + cacheTypes[type].buObject = this.buObject; + cacheTypes[type].properties = this.properties; - const result = await cacheTypes[type].retrieveForCache(null, subTypeArr); + const result = await cacheTypes[type].retrieveForCache(null, subTypeArr); + if (cache.getCache()?.[type]) { + // re-run caching to merge with existing cache, assuming we might have missed subtypes + cache.mergeMetadata(type, result.metadata); + } else { cache.setMetadata(type, result.metadata); } } @@ -329,7 +304,7 @@ class TriggeredSend extends MetadataType { } /** - * helper for {@link refresh} that pauses, publishes and starts a triggered send + * helper for {@link TriggeredSend.refresh} that pauses, publishes and starts a triggered send * * @param {string} key external key of triggered send item * @param {boolean} checkKey whether to check if key exists on the server diff --git a/lib/metadataTypes/User.js b/lib/metadataTypes/User.js index 59701f082..5d86c32b4 100644 --- a/lib/metadataTypes/User.js +++ b/lib/metadataTypes/User.js @@ -404,8 +404,11 @@ class User extends MetadataType { if (!metadata.Password) { metadata.Password = this._generatePassword(); Util.logger.info( - ` - Password for ${metadata.UserID} was not given. Generated password: ${metadata.Password}` + ` - Password for ${metadata.UserID} was not given. Generated password:` ); + // use console.log here to print the generated password to bypass the logfile + // eslint-disable-next-line no-console + console.log(metadata.Password); } } @@ -510,7 +513,7 @@ class User extends MetadataType { * @param {string} roleName role.Name * @param {number} userId user.AccountUserID * @param {boolean} assignmentOnly if true, only assignment configuration will be returned - * @param {boolean} [isRoleRemovale=false] if true, role will be removed from user; otherwise added + * @param {boolean} [isRoleRemovale] if true, role will be removed from user; otherwise added * @returns {object} format needed by API */ static _getRoleObjectForDeploy( @@ -737,7 +740,7 @@ class User extends MetadataType { } /** - * helper for {@link retrieveSOAP} + * helper for {@link User.retrieveSOAP} * * @private * @param {TYPE.SoapRequestParams} [requestParams] required for the specific request (filter for example) @@ -897,7 +900,7 @@ class User extends MetadataType { } } /** - * helper for {@link createOrUpdate} to generate a random initial password for new users + * helper for {@link User.createOrUpdate} to generate a random initial password for new users * note: possible minimum length values in SFMC are 6, 8, 10, 15 chars. Therefore we should default here to 15 chars. * * @private diff --git a/lib/metadataTypes/definitions/AttributeGroup.definition.js b/lib/metadataTypes/definitions/AttributeGroup.definition.js index ed9a0558f..2dc24a507 100644 --- a/lib/metadataTypes/definitions/AttributeGroup.definition.js +++ b/lib/metadataTypes/definitions/AttributeGroup.definition.js @@ -1,238 +1,249 @@ module.exports = { bodyIteratorField: 'attributeGroupDefinitions', - dependencies: [], // future may have dependency on Data Extensions + dependencies: ['attributeSet'], // future may have dependency on Data Extensions hasExtended: false, idField: 'definitionID', keyIsFixed: null, keyField: 'definitionKey', nameField: 'definitionName.value', - restPagination: false, + restPagination: false, // Hub API does not support pagination and returns everything instead type: 'attributeGroup', typeDescription: 'BETA: Groupings of Set Definitions (Data Extensions) in Data Designer.', typeRetrieveByDefault: false, typeName: 'Data Designer Attribute Groups', fields: { applicationID: { - isCreateable: null, - isUpdateable: null, - retrieving: true, - template: null, + // used by system generated attribute groups only; contains UUID + isCreateable: false, + isUpdateable: false, + retrieving: false, + template: false, }, applicationKey: { - isCreateable: null, - isUpdateable: null, + // used by system generated attribute groups only + isCreateable: false, + isUpdateable: false, retrieving: true, - template: null, + template: false, }, attributeCount: { - isCreateable: null, - isUpdateable: null, + // auto-populated + isCreateable: false, + isUpdateable: false, retrieving: true, - template: null, + template: false, }, attributeGroupIconKey: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, attributeGroupType: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, attributeSetIdentifiers: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, 'attributeSetIdentifiers[].connectingID.identifierType': { isCreateable: null, isUpdateable: null, - retrieving: false, - template: null, + retrieving: true, + template: false, }, 'attributeSetIdentifiers[].definitionID': { isCreateable: null, isUpdateable: null, retrieving: true, - template: null, + template: false, }, 'attributeSetIdentifiers[].definitionKey': { isCreateable: null, isUpdateable: null, retrieving: true, - template: null, + template: true, }, - 'attributeSetIdentifiers[].definitionName.Contact': { + 'attributeSetIdentifiers[].definitionName.value': { isCreateable: null, isUpdateable: null, retrieving: true, - template: null, + template: false, }, 'attributeSetIdentifiers[].namespace': { isCreateable: null, isUpdateable: null, retrieving: false, - template: null, + template: false, }, canAddProperties: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, canAddRelationships: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, canChangeProperties: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, canModify: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, canRemove: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, connectingID: { - isCreateable: null, - isUpdateable: null, - retrieving: false, - template: null, + isCreateable: true, + isUpdateable: true, + retrieving: true, + template: true, }, 'connectingID.identifierType': { - isCreateable: null, - isUpdateable: null, - retrieving: false, - template: null, + isCreateable: true, + isUpdateable: true, + retrieving: true, + template: true, }, containsSchemaAttributes: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, definitionID: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: false, }, definitionKey: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, 'definitionName.value': { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, description: { - isCreateable: null, - isUpdateable: null, + // optional field. not returned by API if empty + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, displayOrder: { - isCreateable: null, - isUpdateable: null, + // auto-set to i+1 + isCreateable: false, + isUpdateable: false, retrieving: true, - template: null, + template: false, }, fullyQualifiedName: { - isCreateable: null, - isUpdateable: null, - retrieving: true, - template: null, + // equal to defitionName.value; auto-populated by preDeployTasks + isCreateable: true, + isUpdateable: true, + retrieving: false, + template: false, }, isHidden: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, isOwner: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, isPrimary: { - isCreateable: null, - isUpdateable: null, - retrieving: true, - template: null, + // always false, purpose unknown + isCreateable: false, + isUpdateable: false, + retrieving: false, + template: false, }, isSystemDefined: { - isCreateable: null, - isUpdateable: null, + isCreateable: false, + isUpdateable: false, retrieving: true, - template: null, + template: false, }, localizedDescription: { - isCreateable: null, - isUpdateable: null, - retrieving: true, - template: null, + // always an empty object + isCreateable: false, + isUpdateable: false, + retrieving: false, + template: false, }, 'localizedDescription.resourceSetKey': { isCreateable: null, isUpdateable: null, retrieving: true, - template: null, + template: true, }, 'localizedDescription.resourceValueKey': { isCreateable: null, isUpdateable: null, retrieving: true, - template: null, + template: true, }, 'localizedDescription.value': { isCreateable: null, isUpdateable: null, retrieving: true, - template: null, + template: true, }, mID: { - isCreateable: null, - isUpdateable: null, + // auto-populated in preDeployTask + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, namespace: { - isCreateable: null, - isUpdateable: null, + // always an empty string + isCreateable: false, + isUpdateable: false, retrieving: false, - template: null, + template: false, }, objectState: { - isCreateable: null, - isUpdateable: null, - retrieving: true, - template: null, + // seems to always contain "Created" + isCreateable: false, + isUpdateable: false, + retrieving: false, + template: false, }, requiredRelationships: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, }, }; diff --git a/lib/metadataTypes/definitions/SetDefinition.definition.js b/lib/metadataTypes/definitions/AttributeSet.definition.js similarity index 94% rename from lib/metadataTypes/definitions/SetDefinition.definition.js rename to lib/metadataTypes/definitions/AttributeSet.definition.js index 5d994769d..47e77cde4 100644 --- a/lib/metadataTypes/definitions/SetDefinition.definition.js +++ b/lib/metadataTypes/definitions/AttributeSet.definition.js @@ -1,17 +1,18 @@ module.exports = { bodyIteratorField: 'setDefinition', - dependencies: [], // future may have dependency on Data Extensions + dependencies: ['folder-hidden', 'folder-dataextension', 'dataExtension'], // future may have dependency on Data Extensions hasExtended: false, idField: 'definitionID', keyIsFixed: null, keyField: 'definitionKey', nameField: 'name', + folderIdField: 'categoryID', createdDateField: 'createDate', createdNameField: 'createdBy', lastmodDateField: null, lastmodNameField: null, - restPagination: false, - type: 'setDefinition', + restPagination: false, // Hub API does not support pagination and returns everything instead + type: 'attributeSet', typeDescription: 'BETA: Data Extensions linked to Attribute Groups in Data Designer.', typeRetrieveByDefault: false, typeName: 'Data Designer Set Definitions', @@ -65,10 +66,10 @@ module.exports = { template: null, }, 'connectingID.identifierType': { - isCreateable: null, - isUpdateable: null, - retrieving: true, - template: null, + isCreateable: true, + isUpdateable: true, + retrieving: false, + template: false, }, createDate: { isCreateable: null, @@ -130,17 +131,25 @@ module.exports = { retrieving: true, template: null, }, + definitionName: { + isCreateable: true, + isUpdateable: true, + retrieving: false, + template: false, + }, 'definitionName.value': { - isCreateable: null, - isUpdateable: null, - retrieving: true, - template: null, + // equal to 'name'; auto-populated by preDeployTasks + isCreateable: true, + isUpdateable: true, + retrieving: false, + template: false, }, fullyQualifiedName: { - isCreateable: null, - isUpdateable: null, - retrieving: true, - template: null, + // equal to 'name'; auto-populated by preDeployTasks + isCreateable: true, + isUpdateable: true, + retrieving: false, + template: false, }, isCustomObjectBacked: { isCreateable: null, @@ -233,28 +242,28 @@ module.exports = { template: null, }, localizedDescription: { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, 'localizedDescription.resourceSetKey': { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, 'localizedDescription.resourceValueKey': { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, 'localizedDescription.value': { - isCreateable: null, - isUpdateable: null, + isCreateable: true, + isUpdateable: true, retrieving: true, - template: null, + template: true, }, name: { isCreateable: null, @@ -436,6 +445,18 @@ module.exports = { retrieving: true, template: null, }, + 'relationships[].relationshipAttributes[].c__leftFullyQualifiedName': { + isCreateable: null, + isUpdateable: null, + retrieving: true, + template: null, + }, + 'relationships[].relationshipAttributes[].c__rightFullyQualifiedName': { + isCreateable: null, + isUpdateable: null, + retrieving: true, + template: null, + }, 'relationships[].relationshipID': { isCreateable: null, isUpdateable: null, @@ -832,5 +853,11 @@ module.exports = { retrieving: true, template: null, }, + r__folder_Path: { + isCreateable: null, + isUpdateable: null, + retrieving: true, + template: null, + }, }, }; diff --git a/lib/metadataTypes/definitions/Automation.definition.js b/lib/metadataTypes/definitions/Automation.definition.js index c7ab19a19..e34b258ca 100644 --- a/lib/metadataTypes/definitions/Automation.definition.js +++ b/lib/metadataTypes/definitions/Automation.definition.js @@ -42,12 +42,19 @@ module.exports = { keyField: 'key', nameField: 'name', folderIdField: 'categoryId', - createdDateField: 'createdDate', - createdNameField: 'createdByName', - lastmodDateField: 'lastSavedDate', - lastmodNameField: 'lastSavedByName', + createdDateField: 'createdDate', // only returned by upsert + createdNameField: 'createdByName', // only returned by upsert + lastmodDateField: 'lastSavedDate', // only returned by upsert + lastmodNameField: 'lastSavedByName', // only returned by upsert restPagination: true, maxKeyLength: 200, // confirmed max length + scheduleTypeMapping: { + MINUTELY: 1, + HOURLY: 2, + DAILY: 3, + WEEKLY: 4, + MONTHLY: 5, + }, statusMapping: { AwaitingTrigger: 7, Building: 1, @@ -336,31 +343,31 @@ module.exports = { lastSavedDate: { isCreateable: false, isUpdateable: false, - retrieving: true, + retrieving: false, // only returned by upsert template: false, }, lastSavedByName: { isCreateable: false, isUpdateable: false, - retrieving: true, + retrieving: false, // only returned by upsert template: false, }, createdDate: { isCreateable: false, isUpdateable: false, - retrieving: true, + retrieving: false, // only returned by upsert template: false, }, createdByName: { isCreateable: false, isUpdateable: false, - retrieving: true, + retrieving: false, // only returned by upsertt template: false, }, updateInProgress: { isCreateable: false, isUpdateable: false, - retrieving: true, + retrieving: false, template: false, }, name: { @@ -474,8 +481,8 @@ module.exports = { 'schedule.timezoneId': { isCreateable: true, isUpdateable: true, - retrieving: true, - template: true, + retrieving: false, + template: false, }, 'schedule.timezoneName': { isCreateable: true, @@ -484,10 +491,10 @@ module.exports = { template: true, }, 'schedule.typeId': { - isCreateable: true, - isUpdateable: true, - retrieving: true, - template: true, + isCreateable: false, + isUpdateable: false, + retrieving: false, + template: false, }, status: { isCreateable: true, diff --git a/lib/metadataTypes/definitions/ImportFile.definition.js b/lib/metadataTypes/definitions/ImportFile.definition.js index b1938c785..a88063322 100644 --- a/lib/metadataTypes/definitions/ImportFile.definition.js +++ b/lib/metadataTypes/definitions/ImportFile.definition.js @@ -222,11 +222,41 @@ module.exports = { retrieving: true, template: true, }, - c__dataAction: { skipValidation: true }, - r__dataExtension_CustomerKey: { skipValidation: true }, - c__destinationType: { skipValidation: true }, - r__list_PathName: { skipValidation: true }, - r__fileLocation_name: { skipValidation: true }, - c__subscriberImportType: { skipValidation: true }, + c__dataAction: { + isCreateable: false, + isUpdateable: false, + retrieving: true, + template: true, + }, + r__dataExtension_CustomerKey: { + isCreateable: false, + isUpdateable: false, + retrieving: true, + template: true, + }, + c__destinationType: { + isCreateable: false, + isUpdateable: false, + retrieving: true, + template: true, + }, + r__list_PathName: { + isCreateable: false, + isUpdateable: false, + retrieving: true, + template: true, + }, + r__fileLocation_name: { + isCreateable: false, + isUpdateable: false, + retrieving: true, + template: true, + }, + c__subscriberImportType: { + isCreateable: false, + isUpdateable: false, + retrieving: true, + template: true, + }, }, }; diff --git a/lib/metadataTypes/definitions/TriggeredSend.definition.js b/lib/metadataTypes/definitions/TriggeredSend.definition.js index e5afad57e..47763daf5 100644 --- a/lib/metadataTypes/definitions/TriggeredSend.definition.js +++ b/lib/metadataTypes/definitions/TriggeredSend.definition.js @@ -535,6 +535,7 @@ module.exports = { r__folder_Path: { skipValidation: true }, r__assetMessage_Name_readOnly: { skipValidation: true }, r__assetMessage_Key: { skipValidation: true }, + r__email_Name: { skipValidation: true }, r__list_PathName: { skipValidation: true }, }, }; diff --git a/lib/util/cache.js b/lib/util/cache.js index bcea3a35d..b95931e3e 100644 --- a/lib/util/cache.js +++ b/lib/util/cache.js @@ -72,10 +72,15 @@ module.exports = { * @returns {void} */ mergeMetadata: (type, metadataMap, overrideMID) => { - dataStore[overrideMID || currentMID][type] = Object.assign( - metadataMap, - dataStore[currentMID][type] - ); + // ensure cache exists for type + dataStore[currentMID][type] ||= {}; + // if overrideMID is provided, create a copy of current MID cache + if (overrideMID) { + // ! needs to be verified if this is actually needed. When discovering an issue with this method actually overriting metadataMap, this copy-logic was present and i did not want to break things + dataStore[overrideMID][type] = Object.assign({}, dataStore[currentMID][type]); + } + // merge metadataMap into existing cache + Object.assign(dataStore[overrideMID || currentMID][type] || {}, metadataMap); }, /** * standardized method for getting data from cache. diff --git a/lib/util/cli.js b/lib/util/cli.js index a18927798..d16c4fc62 100644 --- a/lib/util/cli.js +++ b/lib/util/cli.js @@ -53,6 +53,46 @@ const Cli = { return null; } }, + + /** + * + * @param {TYPE.SupportedMetadataTypes} type limit execution to given metadata type + * @param {TYPE.SupportedMetadataTypes[]} dependentTypes types that depent on type + * @returns {Promise.} true if user wants to continue with retrieve + */ + async postFixKeysReretrieve(type, dependentTypes) { + if (Util.isTrue(Util.skipInteraction?.fixKeysReretrieve)) { + return true; + } else if (Util.isFalse(Util.skipInteraction?.fixKeysReretrieve)) { + return false; + } else { + const now = await inquirer.prompt([ + { + type: 'confirm', + name: 'fixKeysReretrieve', + message: `Do you want to re-retrieve dependent types (${dependentTypes.join( + ', ' + )}) now?`, + default: true, + }, + ]); + if (Util.OPTIONS._multiBuExecution) { + const remember = await inquirer.prompt([ + { + type: 'confirm', + name: 'rememberFixKeysReretrieve', + message: `Remember answer for other BUs?`, + default: true, + }, + ]); + if (remember.rememberFixKeysReretrieve) { + Util.skipInteraction ||= {}; + Util.skipInteraction.fixKeysReretrieve = now.fixKeysReretrieve; + } + } + return now.fixKeysReretrieve; + } + }, /** * helper that logs to cli which credentials are already existing in our config file * diff --git a/lib/util/file.js b/lib/util/file.js index 89206f83e..d164a943c 100644 --- a/lib/util/file.js +++ b/lib/util/file.js @@ -381,7 +381,7 @@ const File = { * @param {string | string[]} directory directory where the file is stored * @param {string} filename name of the file without '.json' ending * @param {string} filetype filetype suffix - * @param {string} [encoding='utf8'] read file with encoding (defaults to utf-8) + * @param {string} [encoding] read file with encoding (defaults to utf-8) * @returns {Promise. | void} file contents; void on error */ readFilteredFilename: function (directory, filename, filetype, encoding) { @@ -514,7 +514,7 @@ const File = { /** * Initalises Prettier formatting lib async. * - * @param {string} [filetype='html'] filetype ie. JSON or SSJS + * @param {string} [filetype] filetype ie. JSON or SSJS * @returns {Promise.} success of config load */ async initPrettier(filetype = 'html') { diff --git a/lib/util/init.js b/lib/util/init.js index 22aa7b966..230881d3f 100644 --- a/lib/util/init.js +++ b/lib/util/init.js @@ -8,6 +8,8 @@ const InitNpm = require('./init.npm'); const InitConfig = require('./init.config'); const inquirer = require('inquirer'); const Util = require('./util'); +const fs = require('node:fs'); +const path = require('node:path'); /** * CLI helper class @@ -22,6 +24,10 @@ const Init = { * @returns {Promise.} - */ async initProject(properties, credentialName) { + if (!(await Init._checkPathForCloud())) { + return; + } + const skipInteraction = Util.skipInteraction; if (!properties) { // try to get cached properties because we return null in case of a crucial error @@ -192,6 +198,10 @@ const Init = { * @returns {Promise.} - */ async joinProject() { + if (!(await Init._checkPathForCloud())) { + return; + } + const responses = await inquirer.prompt([ { type: 'confirm', @@ -217,6 +227,9 @@ const Init = { ]); const repoName = gitRepoQs.gitRepoUrl.split('/').pop().replace('.git', ''); // clone repo into current folder + Util.logger.info( + 'Cloning initiated. You might be asked for your Git credentials in a pop-up window in a few seconds.' + ); Util.execSync( 'git', [ @@ -227,6 +240,16 @@ const Init = { gitRepoQs.gitRepoUrl, ].filter(Boolean) ); + + if (!fs.existsSync(repoName)) { + Util.logger.error( + 'Could not clone repository. Please check your Git-Repository URL as well as your credentials and try again.' + ); + Util.logger.info( + 'Check if you need an "API-Token" instead of your normal user password to authenticate' + ); + return; + } // make sure we switch to the new subfolder or else the rest will fail process.chdir(repoName); @@ -357,6 +380,10 @@ const Init = { * @returns {Promise.} success flag */ async upgradeProject(properties, initial, repoName) { + if (!(await Init._checkPathForCloud())) { + return; + } + let status; const versionBeforeUpgrade = properties?.version || '0.0.0'; if (!initial) { @@ -390,9 +417,66 @@ const Init = { return true; }, + /** + * check if git repo is being saved on a cloud service and warn the user + * + * @private + * @returns {void} throws errors if problems were found + */ + async _checkPathForCloud() { + const absolutePath = path.resolve(''); + // popular cloud services and their respective default name for the absolute path + // * CloudDocs is the default folder name for iCloud + const cloudServices = ['Dropbox', 'OneDrive', 'Google Drive', 'iCloud', 'CloudDocs']; + let cloudServiceFound = false; + for (const variable in cloudServices) { + if (absolutePath.includes(cloudServices[variable])) { + Util.logger.warn( + `It seems your project folder will be synchronized via '${ + cloudServices[variable] === 'CloudDocs' ? 'iCloud' : cloudServices[variable] + }'. This can reduce the overall performance of your computer due to conflicts with Git.` + ); + Util.logger.warn( + `We strongly recommend moving your project folder outside of the '${ + cloudServices[variable] === 'CloudDocs' ? 'iCloud' : cloudServices[variable] + }' folder.` + ); + cloudServiceFound = true; + } + } + if (!cloudServiceFound && absolutePath.includes(process.env.USERPROFILE)) { + // warn user to not place project folder into user profile folder + Util.logger.warn( + `It seems your project folder is located in your user profile's default folder which is often synchronized to webservices like ${cloudServices.join( + ', ' + )}. This can reduce the overall performance of your computer due to conflicts between with Git.` + ); + Util.logger.warn( + `We strongly recommend moving your project folder outside of this folder.` + ); + cloudServiceFound = true; + } + if (cloudServiceFound) { + const responses = await inquirer.prompt([ + { + type: 'confirm', + name: 'ignoreCloudWarning', + message: 'Do you want to continue anyways?', + default: false, + }, + ]); + if (!responses.ignoreCloudWarning) { + Util.logger.error('Exiting due to cloud service warning'); + return false; + } + } + return true; + }, + /** * finds credentials that are set up in config but not in auth file * + * @private * @param {TYPE.Mcdevrc} properties javascript object in .mcdevrc.json * @returns {string[]} list of credential names */ diff --git a/lib/util/util.js b/lib/util/util.js index a5bfe7cf3..b8b2e5b96 100644 --- a/lib/util/util.js +++ b/lib/util/util.js @@ -3,10 +3,10 @@ const TYPE = require('../../types/mcdev.d'); const MetadataDefinitions = require('./../MetadataTypeDefinitions'); const packageJsonMcdev = require('../../package.json'); +const child_process = require('node:child_process'); const process = require('node:process'); const toposort = require('toposort'); const winston = require('winston'); -const child_process = require('node:child_process'); /** * Util that contains logger and simple util methods @@ -80,6 +80,7 @@ const Util = { return false; } }, + /** * ensure provided MarketList exists and it's content including markets and BUs checks out * @@ -130,29 +131,32 @@ const Util = { * @returns {void} */ signalFatalError() { - Util.logger.debug('Util.signalFataError() sets process.exitCode = 1'); - process.exitCode = 1; + Util.logger.debug('Util.signalFataError() sets process.exitCode = 1 unless already set'); + process.exitCode ||= 1; }, /** - * SFMC accepts multiple true values for Boolean attributes for which we are checking here + * SFMC accepts multiple true values for Boolean attributes for which we are checking here. + * The same problem occurs when evaluating boolean CLI flags * * @param {*} attrValue value * @returns {boolean} attribute value == true ? true : false */ isTrue(attrValue) { - return ['true', 'TRUE', 'True', '1', 1, 'Y', true].includes(attrValue); + return ['true', 'TRUE', 'True', '1', 1, 'Y', 'y', true].includes(attrValue); }, /** - * SFMC accepts multiple false values for Boolean attributes for which we are checking here + * SFMC accepts multiple false values for Boolean attributes for which we are checking here. + * The same problem occurs when evaluating boolean CLI flags * * @param {*} attrValue value * @returns {boolean} attribute value == false ? true : false */ isFalse(attrValue) { - return ['false', 'FALSE', 'False', '0', 0, 'N', false].includes(attrValue); + return ['false', 'FALSE', 'False', '0', 0, 'N', 'n', false].includes(attrValue); }, + /** - * helper for {@link Mcdev.retrieve}, {@link Mcdev.retrieveAsTemplate} and {@link Mcdev.deploy} + * helper for Mcdev.retrieve, Mcdev.retrieveAsTemplate and Mcdev.deploy * * @param {TYPE.SupportedMetadataTypes} selectedType type or type-subtype * @param {boolean} [handleOutside] if the API reponse is irregular this allows you to handle it outside of this generic method @@ -229,7 +233,7 @@ const Util = { /** * wrapper around our standard winston logging to console and logfile * - * @param {boolean} [noLogFile=false] optional flag to indicate if we should log to file; CLI logs are always on + * @param {boolean} [noLogFile] optional flag to indicate if we should log to file; CLI logs are always on * @returns {object} initiated logger for console and file */ _createNewLoggerTransport: function (noLogFile = false) { @@ -242,13 +246,21 @@ const Util = { // debug: 5, // silly: 6 // } + if ( + process.env.VSCODE_AMD_ENTRYPOINT === 'vs/workbench/api/node/extensionHostProcess' || + process.env.VSCODE_CRASH_REPORTER_PROCESS_TYPE === 'extensionHost' + ) { + Util.OPTIONS.noLogColors = true; + } const logFileName = new Date().toISOString().split(':').join('.'); const transports = { console: new winston.transports.Console({ // Write logs to Console level: Util.OPTIONS.loggerLevel || 'info', format: winston.format.combine( - winston.format.colorize(), + Util.OPTIONS.noLogColors + ? winston.format.uncolorize() + : winston.format.colorize(), winston.format.timestamp({ format: 'HH:mm:ss' }), winston.format.simple(), winston.format.printf( @@ -263,6 +275,7 @@ const Util = { filename: 'logs/' + logFileName + '.log', level: 'debug', // log everything format: winston.format.combine( + winston.format.uncolorize(), winston.format.timestamp({ format: 'HH:mm:ss.SSS' }), winston.format.simple(), winston.format.printf( @@ -274,7 +287,9 @@ const Util = { // Write logs to additional error-logfile for better visibility of errors filename: 'logs/' + logFileName + '-errors.log', level: 'error', // only log errors + lazy: true, // if true, log files will be created on demand, not at the initialization time. format: winston.format.combine( + winston.format.uncolorize(), winston.format.timestamp({ format: 'HH:mm:ss.SSS' }), winston.format.simple(), winston.format.printf( @@ -296,8 +311,8 @@ const Util = { /** * initiate winston logger * - * @param {boolean} [restart=false] if true, logger will be restarted; otherwise, an existing logger will be used - * @param {boolean} [noLogFile=false] if false, logger will log to file; otherwise, only to console + * @param {boolean} [restart] if true, logger will be restarted; otherwise, an existing logger will be used + * @param {boolean} [noLogFile] if false, logger will log to file; otherwise, only to console * @returns {void} */ startLogger: function (restart = false, noLogFile = false) { @@ -438,6 +453,7 @@ const Util = { } return str; }, + /** * get key of an object based on the first matching value * @@ -454,6 +470,31 @@ const Util = { throw new Error(`${val} not found in object`); }, + /** + *helper for Mcdev.fixKeys. Retrieve dependent metadata + * + * @param {string} fixedType type of the metadata passed as a parameter to fixKeys function + * @returns {string[]} array of types that depend on the given type + */ + getDependentMetadata(fixedType) { + const dependencies = new Set(); + + for (const dependentType of Object.keys(MetadataDefinitions)) { + if (MetadataDefinitions[dependentType].dependencies.includes(fixedType)) { + // fixedType was found as a dependency of dependentType + dependencies.add(dependentType); + } else if ( + MetadataDefinitions[dependentType].dependencies.some((dependency) => + dependency.startsWith(fixedType + '-') + ) + ) { + // if MetadataTypeDefinitions[dependentType].dependencies start with type then also add dependentType to the set; use some to check if any of the dependencies start with type + dependencies.add(dependentType); + } + } + return [...dependencies]; + }, + /** * Returns Order in which metadata needs to be retrieved/deployed * @@ -736,7 +777,7 @@ const Util = { }); }, /** - * helper for {@link Asset._extractCode} and {@link Script.prepExtractedCode} to determine if a code block is a valid SSJS block + * helper for Asset.extractCode and Script.prepExtractedCode to determine if a code block is a valid SSJS block * * @example the following is invalid: * ", + "categoryId": 304, + "createdDate": "2022-10-20T00:41:26.163", + "modifiedDate": "2022-10-20T00:41:26.163" +} diff --git a/test/resources/9999999/automation/v1/scripts/get-response.json b/test/resources/9999999/automation/v1/scripts/get-response.json index d5830148f..d928b6361 100644 --- a/test/resources/9999999/automation/v1/scripts/get-response.json +++ b/test/resources/9999999/automation/v1/scripts/get-response.json @@ -8,8 +8,18 @@ "name": "testExisting_script", "key": "testExisting_script", "description": "", - "script": "", + "categoryId": 304, + "createdDate": "2022-10-20T00:41:26.163", + "modifiedDate": "2022-10-20T00:41:26.163" + }, + { + "ssjsActivityId": "39f6a488-20eb-4ba0-b0b9-noScriptTag", + "name": "testExisting_script_noScriptTag", + "key": "testExisting_script_noScriptTag", + "description": "", + "script": "// no script tag\n", + "categoryId": 304, "createdDate": "2022-10-20T00:41:26.163", "modifiedDate": "2022-10-20T00:41:26.163" } diff --git a/test/resources/9999999/automation/v1/scripts/post-response.json b/test/resources/9999999/automation/v1/scripts/post-response.json new file mode 100644 index 000000000..aeeb66322 --- /dev/null +++ b/test/resources/9999999/automation/v1/scripts/post-response.json @@ -0,0 +1,10 @@ +{ + "ssjsActivityId": "39f6a488-20eb-4ba0-b0b9-new", + "name": "testNew_script", + "key": "testNew_script", + "description": "created on deploy", + "script": "", + "categoryId": 304, + "createdDate": "2022-10-20T00:41:26.163", + "modifiedDate": "2022-10-20T00:41:26.163" +} diff --git a/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml b/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml new file mode 100644 index 000000000..e7cf0d2ef --- /dev/null +++ b/test/resources/9999999/dataExtension/retrieve-Name=testExisting_dataExtension-response.xml @@ -0,0 +1,52 @@ + + + + RetrieveResponse + urn:uuid:c198cc12-c34c-4d1d-90b0-5b785a342efc + urn:uuid:a0506b59-1847-4405-8231-6a15e26bbcc9 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2022-04-21T19:21:50Z + 2022-04-21T19:26:50Z + + + + + + OK + d175de6e-c8e4-4f5d-9c1d-ad64426ff4b7 + + + 2022-04-21T06:56:27.927 + 2022-04-21T06:56:27.927 + 21711373-72c1-ec11-b83b-48df37d1deb7 + testExisting_dataExtension + testExisting_dataExtension + bla bla + true + true + + + + ContactKey + + + _SubscriberKey + + 6 + 5 + true + false + false + + 2 + + + + \ No newline at end of file diff --git a/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml b/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml new file mode 100644 index 000000000..3ffc1b3eb --- /dev/null +++ b/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testExisting_dataExtension-response.xml @@ -0,0 +1,98 @@ + + + + RetrieveResponse + urn:uuid:6d2f81c8-80ab-44d5-8664-206753e7ac8d + urn:uuid:a7354389-079e-4844-93b5-af6b7bf1d535 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2022-04-21T19:21:52Z + 2022-04-21T19:26:52Z + + + + + + OK + cfe51e71-6a2b-4cb4-aecd-3777076d63bc + + + 8018397d-880d-4f88-940e-3b4eca098a0c + [testExisting_dataExtension].[ContactKey] + ContactKey + 0 + + 50 + true + 3 + true + Text + + + + testExisting_dataExtension + + + + + bea0e308-5d45-4181-a673-da9972a7c674 + [testExisting_dataExtension].[LastName] + LastName + 0 + + 50 + false + 1 + false + Text + + + + testExisting_dataExtension + + + + + 2557b461-a699-4744-950d-e80a19afc2dc + [testExisting_dataExtension].[EmailAddress] + EmailAddress + 0 + + 254 + true + 2 + false + EmailAddress + + + + testExisting_dataExtension + + + + + 42760528-a8c5-44dd-8c1d-ff34e5daee54 + [testExisting_dataExtension].[FirstName] + FirstName + 0 + + 50 + false + 0 + false + Text + + + + testExisting_dataExtension + + + + + \ No newline at end of file diff --git a/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml b/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml new file mode 100644 index 000000000..8018e9949 --- /dev/null +++ b/test/resources/9999999/dataExtensionField/retrieve-DataExtension.CustomerKey=testNew_dataExtensionORDataExtension.CustomerKey=testExisting_dataExtension-response.xml @@ -0,0 +1,99 @@ + + + + + RetrieveResponse + urn:uuid:6d2f81c8-80ab-44d5-8664-206753e7ac8d + urn:uuid:a7354389-079e-4844-93b5-af6b7bf1d535 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2022-04-21T19:21:52Z + 2022-04-21T19:26:52Z + + + + + + OK + cfe51e71-6a2b-4cb4-aecd-3777076d63bc + + + 8018397d-880d-4f88-940e-3b4eca098a0c + [testExisting_dataExtension].[ContactKey] + ContactKey + 0 + + 50 + true + 3 + true + Text + + + + testExisting_dataExtension + + + + + bea0e308-5d45-4181-a673-da9972a7c674 + [testExisting_dataExtension].[LastName] + LastName + 0 + + 50 + false + 1 + false + Text + + + + testExisting_dataExtension + + + + + 2557b461-a699-4744-950d-e80a19afc2dc + [testExisting_dataExtension].[EmailAddress] + EmailAddress + 0 + + 254 + true + 2 + false + EmailAddress + + + + testExisting_dataExtension + + + + + 42760528-a8c5-44dd-8c1d-ff34e5daee54 + [testExisting_dataExtension].[FirstName] + FirstName + 0 + + 50 + false + 0 + false + Text + + + + testExisting_dataExtension + + + + + \ No newline at end of file diff --git a/test/resources/9999999/dataExtract/build-expected.json b/test/resources/9999999/dataExtract/build-expected.json new file mode 100644 index 000000000..a3586e8eb --- /dev/null +++ b/test/resources/9999999/dataExtract/build-expected.json @@ -0,0 +1,35 @@ +{ + "dataFields": [ + { + "name": "ColumnDelimiter", + "type": "string", + "value": "," + }, + { + "name": "DECustomerKey", + "type": "string", + "value": "testTemplated_dataExtension" + }, + { + "name": "HasColumnHeaders", + "type": "bool", + "value": "False" + }, + { + "name": "TextQualified", + "type": "bool", + "value": "False" + }, + { + "name": "UsesLineFeed", + "type": "bool", + "value": "False" + } + ], + "description": "blabla", + "fileSpec": "testExisting-%%Year%%-%%Month%%-%%Day%%", + "intervalType": 0, + "key": "testTemplated_dataExtract", + "name": "testTemplated_dataExtract", + "r__dataExtractType_name": "Data Extension Extract" +} diff --git a/test/resources/9999999/dataExtract/get-expected.json b/test/resources/9999999/dataExtract/get-expected.json new file mode 100644 index 000000000..ca914d53f --- /dev/null +++ b/test/resources/9999999/dataExtract/get-expected.json @@ -0,0 +1,39 @@ +{ + "createdBy": 700301950, + "createdDate": "2022-11-09T05:31:21.667", + "dataFields": [ + { + "name": "ColumnDelimiter", + "type": "string", + "value": "," + }, + { + "name": "DECustomerKey", + "type": "string", + "value": "testExisting_dataExtension" + }, + { + "name": "HasColumnHeaders", + "type": "bool", + "value": "False" + }, + { + "name": "TextQualified", + "type": "bool", + "value": "False" + }, + { + "name": "UsesLineFeed", + "type": "bool", + "value": "False" + } + ], + "description": "blabla", + "fileSpec": "testExisting-%%Year%%-%%Month%%-%%Day%%", + "intervalType": 0, + "key": "testExisting_dataExtract", + "modifiedBy": 700301950, + "modifiedDate": "2022-11-17T07:13:36.9", + "name": "testExisting_dataExtract", + "r__dataExtractType_name": "Data Extension Extract" +} diff --git a/test/resources/9999999/dataExtract/patch-expected.json b/test/resources/9999999/dataExtract/patch-expected.json new file mode 100644 index 000000000..3086b8c5e --- /dev/null +++ b/test/resources/9999999/dataExtract/patch-expected.json @@ -0,0 +1,37 @@ +{ + "createdBy": 700304523, + "dataFields": [ + { + "name": "ColumnDelimiter", + "type": "string", + "value": "," + }, + { + "name": "DECustomerKey", + "type": "string", + "value": "testExisting_dataExtension" + }, + { + "name": "HasColumnHeaders", + "type": "bool", + "value": "False" + }, + { + "name": "TextQualified", + "type": "bool", + "value": "False" + }, + { + "name": "UsesLineFeed", + "type": "bool", + "value": "False" + } + ], + "description": "created via deploy", + "fileSpec": "testExisting-%%Year%%-%%Month%%-%%Day%%", + "intervalType": 0, + "key": "testExisting_dataExtract", + "modifiedBy": 700304523, + "name": "testExisting_dataExtract", + "r__dataExtractType_name": "Data Extension Extract" +} diff --git a/test/resources/9999999/dataExtract/post-expected.json b/test/resources/9999999/dataExtract/post-expected.json new file mode 100644 index 000000000..5d6cbb8ca --- /dev/null +++ b/test/resources/9999999/dataExtract/post-expected.json @@ -0,0 +1,37 @@ +{ + "createdBy": 700304523, + "dataFields": [ + { + "name": "ColumnDelimiter", + "type": "string", + "value": "," + }, + { + "name": "DECustomerKey", + "type": "string", + "value": "testExisting_dataExtension" + }, + { + "name": "HasColumnHeaders", + "type": "bool", + "value": "False" + }, + { + "name": "TextQualified", + "type": "bool", + "value": "False" + }, + { + "name": "UsesLineFeed", + "type": "bool", + "value": "False" + } + ], + "description": "blabla", + "fileSpec": "testNew-%%Year%%-%%Month%%-%%Day%%", + "intervalType": 0, + "key": "testNew_dataExtract", + "modifiedBy": 700304523, + "name": "testNew_dataExtract", + "r__dataExtractType_name": "Data Extension Extract" +} diff --git a/test/resources/9999999/dataExtract/template-expected.json b/test/resources/9999999/dataExtract/template-expected.json new file mode 100644 index 000000000..a407ded63 --- /dev/null +++ b/test/resources/9999999/dataExtract/template-expected.json @@ -0,0 +1,35 @@ +{ + "dataFields": [ + { + "name": "ColumnDelimiter", + "type": "string", + "value": "," + }, + { + "name": "DECustomerKey", + "type": "string", + "value": "{{{prefix}}}dataExtension" + }, + { + "name": "HasColumnHeaders", + "type": "bool", + "value": "False" + }, + { + "name": "TextQualified", + "type": "bool", + "value": "False" + }, + { + "name": "UsesLineFeed", + "type": "bool", + "value": "False" + } + ], + "description": "blabla", + "fileSpec": "testExisting-%%Year%%-%%Month%%-%%Day%%", + "intervalType": 0, + "key": "{{{prefix}}}dataExtract", + "name": "{{{prefix}}}dataExtract", + "r__dataExtractType_name": "Data Extension Extract" +} diff --git a/test/resources/9999999/dataFolder/retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml b/test/resources/9999999/dataFolder/retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml new file mode 100644 index 000000000..306c34f4f --- /dev/null +++ b/test/resources/9999999/dataFolder/retrieve-ContentType=contextual_suppression_listORContentType=publicationORContentType=suppression_listORContentType=mysubsORContentType=list-response.xml @@ -0,0 +1,136 @@ + + + + RetrieveResponse + urn:uuid:016c1c21-3227-4e9c-9497-33b0c15d971b + urn:uuid:f559d162-26ae-4a2c-8bfe-0abaa0be36aa + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-08-08T12:49:25Z + 2023-08-08T12:54:25Z + + + + + + OK + 01c5259b-174e-4c70-9fa7-f5cd984b28c6 + + + 9999999 + + + 2017-02-16T01:59:27.177 + 2017-02-16T01:59:27.177 + 404 + + list_default + + + 0 + + + my lists + + list + true + false + true + + + + 9999999 + + + 2016-07-22T11:52:17.55 + 2016-07-22T11:52:17.55 + 89332 + + mysubs_default + + + 0 + + + my subscribers + + mysubs + true + false + true + + + + 9999999 + + + 2017-02-16T01:59:32.323 + 2017-02-16T01:59:32.323 + 419 + + suppression_list_default + + + 0 + + + Suppression Lists + + suppression_list + true + false + true + + + + 9999999 + + + 2017-02-16T01:59:34.023 + 2017-02-16T01:59:34.023 + 424 + + publication_default + + + 0 + + + Publication Lists + + publication + true + false + true + + + + 9999999 + + + 2016-07-22T11:52:24.417 + 2016-07-22T11:52:24.417 + 89373 + + contextual_suppression_list_default + + + 0 + + + Auto-Suppression Configuration + + contextual_suppression_list + true + false + true + + + + diff --git a/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml b/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml new file mode 100644 index 000000000..65f4ad08a --- /dev/null +++ b/test/resources/9999999/dataFolder/retrieve-ContentType=ssjsactivity-response.xml @@ -0,0 +1,48 @@ + + + + RetrieveResponse + urn:uuid:f36f3303-3b5a-4641-8109-b26447634d91 + urn:uuid:33983968-28c4-4379-bb5f-f80ae32eb988 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2022-04-19T20:03:41Z + 2022-04-19T20:08:41Z + + + + + + OK + 02cd5ccb-8f84-4651-826f-71169eeecf05 + + + 9999999 + + + 2017-01-24T06:32:42.353 + 2017-01-24T06:32:42.353 + 304 + + SSJSActivity_default + + + 0 + + + Scripts + + SSJSActivity + true + false + true + + + + diff --git a/test/resources/9999999/dataFolder/retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml b/test/resources/9999999/dataFolder/retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml new file mode 100644 index 000000000..9bbdc78be --- /dev/null +++ b/test/resources/9999999/dataFolder/retrieve-ContentType=triggered_send_journeybuilderORContentType=triggered_sendORContentType=hidden-response.xml @@ -0,0 +1,276 @@ + + + + RetrieveResponse + urn:uuid:d626d883-8ca4-4cd1-b4ea-cb399015e275 + urn:uuid:b1d23385-97c0-4bc8-b0fe-b54e3310ae6b + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-08-08T12:49:16Z + 2023-08-08T12:54:16Z + + + + + + OK + 6e8873dd-03e2-47b6-823a-fb8681d93d78 + + + 9999999 + + + 2016-07-22T11:52:19.28 + 2016-07-22T11:52:19.28 + 89348 + + triggered_send_default + + + 0 + + + Triggered Sends + + triggered_send + true + false + true + + + + 9999999 + + + 2016-07-22T11:52:34.983 + 2016-07-22T11:52:34.983 + 89396 + + triggered_send_journeybuilder + + + 0 + + + Journey Builder Sends + + triggered_send_journeybuilder + true + false + true + + + + 9999999 + + + 2016-07-29T12:13:27.28 + 2016-07-29T12:13:27.28 + 90889 + + HiddenCategory_default + + + 0 + + + HiddenCategory + Hidden folder to store Hidden items + Hidden + true + false + true + + + + 9999999 + + + 2016-08-25T10:04:09.12 + 2016-08-25T10:04:09.12 + 94030 + + + + + 89396 + + triggered_send_journeybuilder + + Satisfaction Score Survey + + triggered_send_journeybuilder + true + true + true + + + + 9999999 + + + 2016-08-25T10:04:09.133 + 2016-08-25T10:04:09.133 + 94031 + + + + + 94030 + + + Version 1 + + triggered_send_journeybuilder + true + true + true + + + + 9999999 + + + 2021-06-09T10:17:06.27 + 2021-06-09T10:17:06.27 + 664654 + + 6aa28490-6577-4cb2-8eac-fd5e4f983cae + + + 317169 + + HiddenJourneyBuilderTriggeredSends_d + + 6aa28490-6577-4cb2-8eac-fd5e4f983cae_V9 + triggered_send folder to store triggered_send items + triggered_send + true + true + true + + + + 9999999 + + + 2022-07-31T19:55:31.657 + 2022-07-31T19:55:31.657 + 742869 + + 77211381-9967-4472-bd12-f58d4d5952a1 + + + 317169 + + HiddenJourneyBuilderTriggeredSends_d + + 77211381-9967-4472-bd12-f58d4d5952a1_V1 + triggered_send folder to store triggered_send items + triggered_send + true + true + true + + + + 9999999 + + + 2022-07-31T19:56:51.297 + 2022-07-31T19:56:51.297 + 742871 + + HiddenJourneyBuilderSimulationTrigge + + + 90889 + + HiddenCategory_default + + HiddenJourneyBuilderSimulationTriggeredSends + triggered_send_journeybuilder folder to store triggered_send_journeybuilder items + triggered_send_journeybuilder + true + true + true + + + + 9999999 + + + 2023-03-08T10:26:55.787 + 2023-03-08T10:26:55.787 + 771879 + + 8c24f428-4da8-4df6-97a7-beba5166c3c7 + + + 317169 + + HiddenJourneyBuilderTriggeredSends_d + + 8c24f428-4da8-4df6-97a7-beba5166c3c7_V1 + triggered_send folder to store triggered_send items + triggered_send + true + true + true + + + + 9999999 + + + 2023-04-10T15:46:09.947 + 2023-04-10T15:46:09.947 + 776623 + + 0a85b483-4208-4377-87fb-25794f5df244 + + + 317169 + + HiddenJourneyBuilderTriggeredSends_d + + 0a85b483-4208-4377-87fb-25794f5df244_V1 + triggered_send folder to store triggered_send items + triggered_send + true + true + true + + + + 9999999 + + + 2020-03-06T07:57:37.633 + 2020-03-06T07:57:37.633 + 317169 + + HiddenJourneyBuilderTriggeredSends_d + + + 90889 + + HiddenCategory_default + + HiddenJourneyBuilderTriggeredSends + triggered_send folder to store triggered_send items + triggered_send + true + true + true + + + + + diff --git a/test/resources/9999999/dataFolder/retrieve-response.xml b/test/resources/9999999/dataFolder/retrieve-response.xml index 29b1d38a8..f203f327c 100644 --- a/test/resources/9999999/dataFolder/retrieve-response.xml +++ b/test/resources/9999999/dataFolder/retrieve-response.xml @@ -197,6 +197,29 @@ true true + + + 9999999 + + + 2017-02-08T10:19:37.123 + 2017-02-08T10:19:37.123 + 386 + + + + + 2 + + dataextension_default + + Einstein + + dataextension + true + true + true + diff --git a/test/resources/9999999/email/retrieve-response.xml b/test/resources/9999999/email/retrieve-response.xml new file mode 100644 index 000000000..dedb7ab8c --- /dev/null +++ b/test/resources/9999999/email/retrieve-response.xml @@ -0,0 +1,203 @@ + + + + RetrieveResponse + urn:uuid:bda830a5-f8a8-4555-a0f0-9b3cdae02f9f + urn:uuid:afa5fcc9-c276-4f3d-9796-6b31a2b55721 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-08-08T12:49:19Z + 2023-08-08T12:54:19Z + + + + + + OK + e25a4055-f1b6-4fcd-a771-76bcb1cff6a9 + + + 2020-08-13T10:16:59 + 2020-11-09T13:33:30.15 + 483943 + + 255f0e7c-cd37-452b-ba59-cd802359f199 + Sporting Goods for September + my emails + 283575 + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> +<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" /> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<style type="text/css"> +ReadMsgBody{ width: 100%;} +.ExternalClass {width: 100%;} +.ExternalClass, .ExternalClass p, .ExternalClass span, .ExternalClass font, .ExternalClass td, .ExternalClass div {line-height: 100%;} +body {-webkit-text-size-adjust:100%; -ms-text-size-adjust:100%;margin:0 !important; padding:0 !important;} +p { margin: 1em 0;} +table td { border-collapse: collapse;} +img {outline:0;} +a img {border:none;} +p {margin: 1em 0;} +@-ms-viewport{ width: device-width;} +@media only screen and (max-width: 480px) { +body[yahoo] .container { width:100% !important; } +body[yahoo] .footer { width:auto !important; margin-left:0; } +body[yahoo] .content-padding{ padding:4px !important; } +body[yahoo] .mobile-hidden { display:none !important; } +body[yahoo] .logo { display:block !important; padding:0 !important; } +body[yahoo] img { width:auto !important; max-width:308px !important; height:auto !important; max-height:auto !important;} +body[yahoo] .header img { width:auto !important; max-width:316px !important; height:auto !important; max-height:auto !important;} +body[yahoo] .photo img { width:100% !important; max-width:100% !important; height:auto !important;} +body[yahoo] .drop { display:block !important; width: 100% !important; float:left; clear:both;} +body[yahoo] .footerlogo { display:block !important; width: 100% !important; padding-top:15px; float:left; clear:both;} +body[yahoo] .nav4, body[yahoo] .nav5, body[yahoo] .nav6 { display: none !important; } +} +@media only screen and (max-width: 640px) { +body[yahoo] .container { width:100% !important; } +body[yahoo] .mobile-hidden { display:none !important; } +body[yahoo] .logo { display:block !important; padding:0 !important; } +body[yahoo] .photo img { width:100% !important; height:auto !important;} +body[yahoo] .nav5, body[yahoo] .nav6 { display: none !important;} +} +</style> +</head> +<body bgcolor="#ffffff" text="#000000" style="background-color: #FFFFFF; color: #000000; margin: 0px; padding:0px; -webkit-text-size-adjust:none;" yahoo="fix"> + <table width="100%" border="0" cellpadding="0" cellspacing="0" align="center"> + <tr> + <td align="center" valign="top"><custom type="header" name="header"></td> + </tr> + <tr> + <td align="center"> + <table cellspacing="0" cellpadding="0" border="0" width="600" class="container" align="center"> + <tr> + <td> + <table cellspacing="0" cellpadding="0" border="1" bordercolor="#000000" bgcolor="#ffffff" width="100%"> + <tr> + <td align="center" class="header" valign="top"></td> + </tr> + <tr> + <td align="center" valign="top"><table cellspacing="0" cellpadding="0" border="0" width="100%" align="left"> + <tr> + <td class="content-padding" style="padding:10px;"> + <table cellspacing="0" cellpadding="0" border="0" width="100%"> + <tr> + <td class="drop" valign="top" width="33%" align="left"> + <custom type="content" name="left"> + </td> + <td class="drop" valign="top" width="2%" height="10"><img alt="" src="https://image.s7.sfmc-content.com/lib/ffcf14/m/1/spacer.gif" height="10" width="10" style="display: block;"/></td> + <td class="drop" valign="top" width="65%"> + <table border="0" cellpadding="0" cellspacing="0" width="100%"> + <tr> + <td align="left" valign="top"> + <custom type="content" name="right1"> + </td> + </tr> + <tr> + <td align="left" valign="top" style="padding-top: 10px;"> + <custom type="content" name="right2"> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td align="left" colspan="3" valign="top" class="drop" style="padding-top:10px;"> + <custom type="content" name="bottom"> + </td> + </tr> + </table> + </td> + </tr> +</table></td> + </tr> + </table> + </td> + </tr> + </table> + </td> + </tr> + <tr> + <td valign="top"><custom type="footer" name="footer"></td> + </tr> + </table> + <custom name="opencounter" type="tracking"> +</body> +</html> + + + + 934961 + 5E999EA7-97D8-4910-91B3-ED29B16567DA + 36D85559-5345-41CB-9E8E-A6B7675E4A6F + left + <table width="100%" bgcolor="" border="0" bordercolor="" cellpadding="0" cellspacing="0"><tr><td style="font-family:Arial;font-size:13px;">%%First Name%%</td></tr></table> + false + 0 + + false + false + false + + + + 934962 + 9FA2FEE0-8439-4475-B990-BBC95CB30E31 + 68DC9A04-6662-4A23-912A-4A349A1EF040 + right1 + <table width="100%" bgcolor="" border="0" bordercolor="" cellpadding="0" cellspacing="0"><tr><td style="font-family:Arial;font-size:13px;">%%Last Name%%</td></tr></table> + false + 0 + + false + false + false + + + + 934963 + 5CE10FC0-CE06-40CC-8BE4-14583E2D02B3 + AB7920D1-AE37-4137-9BB9-77B746D4A66C + right2 + <table width="100%" bgcolor="" border="0" bordercolor="" cellpadding="0" cellspacing="0"><tr><td style="font-family:Arial;font-size:13px;">%%emailname_%%</td></tr></table> + false + 0 + + false + false + false + + + + 934964 + AF6501E0-8367-4121-9142-ADAFD632FBE7 + 84B63EB0-E248-42D4-B6A6-716C18D2718D + bottom + <table width="100%" bgcolor="" border="0" bordercolor="" cellpadding="0" cellspacing="0"><tr><td style="font-family:Arial;font-size:13px;">%%emailaddr%%</td></tr></table> + false + 0 + + false + false + false + + Sporting Goods for September + true + false + New + Normal + utf-8 + false + Not Checked + + + + + diff --git a/test/resources/9999999/emailSendDefinition/retrieve-response.xml b/test/resources/9999999/emailSendDefinition/retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml similarity index 100% rename from test/resources/9999999/emailSendDefinition/retrieve-response.xml rename to test/resources/9999999/emailSendDefinition/retrieve-IsPlatformObject=falseANDDescriptionnotEqualsSFSendDefinition-response.xml diff --git a/test/resources/9999999/fileTransfer/build-expected.json b/test/resources/9999999/fileTransfer/build-expected.json new file mode 100644 index 000000000..b2c3e837c --- /dev/null +++ b/test/resources/9999999/fileTransfer/build-expected.json @@ -0,0 +1,15 @@ +{ + "customerKey": "testTemplated_fileTransfer", + "description": "17.11.2022", + "fileSpec": "%%Year%%", + "isCompressed": false, + "isEncrypted": false, + "isFileSpecLocalized": false, + "isPgp": false, + "isUpload": true, + "maxFileAge": 0, + "maxFileAgeScheduleOffset": 0, + "maxImportFrequency": 0, + "name": "testTemplated_fileTransfer", + "r__fileLocation_name": "ExactTarget Enhanced FTP" +} diff --git a/test/resources/9999999/fileTransfer/get-expected.json b/test/resources/9999999/fileTransfer/get-expected.json new file mode 100644 index 000000000..c33af7903 --- /dev/null +++ b/test/resources/9999999/fileTransfer/get-expected.json @@ -0,0 +1,17 @@ +{ + "createdDate": "2022-11-09T05:31:56.477", + "customerKey": "testExisting_fileTransfer", + "description": "17.11.2022", + "fileSpec": "%%Year%%", + "isCompressed": false, + "isEncrypted": false, + "isFileSpecLocalized": false, + "isPgp": false, + "isUpload": true, + "maxFileAge": 0, + "maxFileAgeScheduleOffset": 0, + "maxImportFrequency": 0, + "modifiedDate": "2022-11-17T07:13:20.05", + "name": "testExisting_fileTransfer", + "r__fileLocation_name": "ExactTarget Enhanced FTP" +} diff --git a/test/resources/9999999/fileTransfer/patch-expected.json b/test/resources/9999999/fileTransfer/patch-expected.json new file mode 100644 index 000000000..0c460f792 --- /dev/null +++ b/test/resources/9999999/fileTransfer/patch-expected.json @@ -0,0 +1,17 @@ +{ + "createdDate": "2022-11-09T05:31:56.477", + "customerKey": "testExisting_fileTransfer", + "description": "17.11.2022", + "fileSpec": "%%Year%% updated via deploy", + "isCompressed": false, + "isEncrypted": false, + "isFileSpecLocalized": false, + "isPgp": false, + "isUpload": true, + "maxFileAge": 0, + "maxFileAgeScheduleOffset": 0, + "maxImportFrequency": 0, + "modifiedDate": "2022-11-17T07:13:20.05", + "name": "testExisting_fileTransfer", + "r__fileLocation_name": "ExactTarget Enhanced FTP" +} diff --git a/test/resources/9999999/fileTransfer/post-expected.json b/test/resources/9999999/fileTransfer/post-expected.json new file mode 100644 index 000000000..30de51868 --- /dev/null +++ b/test/resources/9999999/fileTransfer/post-expected.json @@ -0,0 +1,17 @@ +{ + "createdDate": "2022-11-09T05:31:56.477", + "customerKey": "testNew_fileTransfer", + "description": "17.11.2022", + "fileSpec": "%%Year%% created on deploy", + "isCompressed": false, + "isEncrypted": false, + "isFileSpecLocalized": false, + "isPgp": false, + "isUpload": true, + "maxFileAge": 0, + "maxFileAgeScheduleOffset": 0, + "maxImportFrequency": 0, + "modifiedDate": "2022-11-17T07:13:20.05", + "name": "testNew_fileTransfer", + "r__fileLocation_name": "ExactTarget Enhanced FTP" +} diff --git a/test/resources/9999999/fileTransfer/template-expected.json b/test/resources/9999999/fileTransfer/template-expected.json new file mode 100644 index 000000000..407519655 --- /dev/null +++ b/test/resources/9999999/fileTransfer/template-expected.json @@ -0,0 +1,15 @@ +{ + "customerKey": "{{{prefix}}}fileTransfer", + "description": "17.11.2022", + "fileSpec": "%%Year%%", + "isCompressed": false, + "isEncrypted": false, + "isFileSpecLocalized": false, + "isPgp": false, + "isUpload": true, + "maxFileAge": 0, + "maxFileAgeScheduleOffset": 0, + "maxImportFrequency": 0, + "name": "{{{prefix}}}fileTransfer", + "r__fileLocation_name": "ExactTarget Enhanced FTP" +} diff --git a/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json b/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json new file mode 100644 index 000000000..078668f80 --- /dev/null +++ b/test/resources/9999999/hub/v1/contacts/schema/attributeGroups/get-response.json @@ -0,0 +1,585 @@ +{ + "attributeGroupDefinitions": [ + { + "mID": 1111111, + "objectState": "Created", + "attributeSetIdentifiers": [ + { + "definitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Email Addresses" + }, + "definitionKey": "EmailAddresses", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Contact" + }, + "definitionKey": "Contact", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + } + ], + "isOwner": true, + "isPrimary": false, + "isSystemDefined": true, + "isHidden": false, + "canAddProperties": false, + "canAddRelationships": false, + "containsSchemaAttributes": true, + "canRemove": false, + "canChangeProperties": false, + "displayOrder": 0, + "requiredRelationships": [ + "0e51de3f-31e2-e611-80cc-1402ec7222b4", + "1451de3f-31e2-e611-80cc-1402ec7222b4", + "9893dc39-31e2-e611-80cc-1402ec7222b4" + ], + "applicationID": "ce703ed3-e01f-4f5f-900d-76a95b363e29", + "canModify": false, + "applicationKey": "com.exacttarget.contacts", + "attributeGroupIconKey": "People", + "fullyQualifiedName": "System Data", + "attributeGroupType": "Standard", + "localizedDescription": {}, + "attributeCount": 7, + "definitionID": "8f93dc39-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "System Data" + }, + "definitionKey": "ETSystem", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "mID": 1111111, + "objectState": "Created", + "attributeSetIdentifiers": [ + { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionName": { + "value": "Chat Message Demographics" + }, + "definitionKey": "ChatMessageDemographics", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "definitionKey": "ChatMessageSubscriptions", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + } + ], + "isOwner": true, + "isPrimary": false, + "isSystemDefined": true, + "isHidden": false, + "canAddProperties": true, + "canAddRelationships": true, + "containsSchemaAttributes": false, + "canRemove": false, + "canChangeProperties": true, + "displayOrder": 1, + "requiredRelationships": [ + "9a42dcad-ae72-4cde-9937-193e17485ad6", + "04ea847d-696d-eb11-b81e-48df37d1df5a" + ], + "canModify": true, + "fullyQualifiedName": "Chat Message Data", + "attributeGroupType": "Standard", + "localizedDescription": {}, + "attributeCount": 37, + "definitionID": "cae9847d-696d-eb11-b81e-48df37d1df5a", + "definitionName": { + "value": "Chat Message Data" + }, + "definitionKey": "ETChatMessage", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "mID": 1111111, + "objectState": "Created", + "attributeSetIdentifiers": [ + { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Email Demographics" + }, + "definitionKey": "EmailDemographics", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + } + ], + "isOwner": true, + "isPrimary": false, + "isSystemDefined": true, + "isHidden": false, + "canAddProperties": false, + "canAddRelationships": true, + "containsSchemaAttributes": false, + "canRemove": false, + "canChangeProperties": false, + "displayOrder": 2, + "requiredRelationships": ["b751de3f-31e2-e611-80cc-1402ec7222b4"], + "applicationID": "b2ca1f50-3cc4-4fd7-a3a3-88bf09fb59fa", + "canModify": false, + "applicationKey": "com.exacttarget.email", + "attributeGroupIconKey": "Email", + "fullyQualifiedName": "Email Data", + "attributeGroupType": "Standard", + "localizedDescription": {}, + "attributeCount": 16, + "definitionID": "b451de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Email Data" + }, + "definitionKey": "ETEmail", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "mID": 1111111, + "objectState": "Created", + "attributeSetIdentifiers": [ + { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "definitionKey": "GroupConnectLineAddress", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "definitionKey": "GroupConnectLineDemographics", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "definitionKey": "GroupConnectLineSubscriptions", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + } + ], + "isOwner": true, + "isPrimary": false, + "isSystemDefined": true, + "isHidden": false, + "canAddProperties": false, + "canAddRelationships": true, + "containsSchemaAttributes": false, + "canRemove": false, + "canChangeProperties": false, + "displayOrder": 3, + "requiredRelationships": [ + "8686d247-3045-ea11-a2e0-1402ec94ec41", + "a686d247-3045-ea11-a2e0-1402ec94ec41", + "9386d247-3045-ea11-a2e0-1402ec94ec41" + ], + "applicationID": "4e9519db-ad21-483a-a3fc-8ab4557eded1", + "canModify": false, + "applicationKey": "com.exacttarget.GroupConnect", + "attributeGroupIconKey": "Mobile", + "fullyQualifiedName": "GroupConnect LINE Data", + "attributeGroupType": "Standard", + "localizedDescription": {}, + "attributeCount": 23, + "definitionID": "ab51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "GroupConnect LINE Data" + }, + "definitionKey": "ETGroupConnectLine", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "mID": 1111111, + "objectState": "Created", + "attributeSetIdentifiers": [ + { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "definitionKey": "MobileDemographics", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "definitionKey": "MobileSubscriptions", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + } + ], + "isOwner": true, + "isPrimary": false, + "isSystemDefined": true, + "isHidden": false, + "canAddProperties": false, + "canAddRelationships": true, + "containsSchemaAttributes": false, + "canRemove": false, + "canChangeProperties": false, + "displayOrder": 4, + "requiredRelationships": [ + "4651de3f-31e2-e611-80cc-1402ec7222b4", + "4352de3f-31e2-e611-80cc-1402ec7222b4" + ], + "applicationID": "e25893f9-08f3-480f-8def-7f8ab0583611", + "canModify": false, + "applicationKey": "com.exacttarget.mobileconnect", + "attributeGroupIconKey": "Mobile", + "fullyQualifiedName": "MobileConnect Data", + "attributeGroupType": "Standard", + "localizedDescription": {}, + "attributeCount": 37, + "definitionID": "4351de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "MobileConnect Data" + }, + "definitionKey": "ETMobileConnect", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "mID": 1111111, + "objectState": "Created", + "attributeSetIdentifiers": [ + { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "MobilePush Demographics" + }, + "definitionKey": "PushDemographics", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "definitionKey": "PushSubscriptions", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "MobilePush Tags" + }, + "definitionKey": "PushTags", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + } + ], + "isOwner": true, + "isPrimary": false, + "isSystemDefined": true, + "isHidden": false, + "canAddProperties": false, + "canAddRelationships": true, + "containsSchemaAttributes": false, + "canRemove": false, + "canChangeProperties": false, + "displayOrder": 5, + "requiredRelationships": [ + "9651de3f-31e2-e611-80cc-1402ec7222b4", + "d052de3f-31e2-e611-80cc-1402ec7222b4", + "bc52de3f-31e2-e611-80cc-1402ec7222b4" + ], + "applicationID": "2051892d-5de2-4ecf-98af-8ca9a40d2c9c", + "canModify": false, + "applicationKey": "com.exacttarget.mobilepush", + "attributeGroupIconKey": "Mobile", + "fullyQualifiedName": "MobilePush Data", + "attributeGroupType": "Standard", + "localizedDescription": {}, + "attributeCount": 65, + "definitionID": "9351de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "MobilePush Data" + }, + "definitionKey": "ETMobilePush", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "mID": 1111111, + "objectState": "Created", + "attributeSetIdentifiers": [ + { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "definitionKey": "PredictiveIntelProductSessions", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Content Views" + }, + "definitionKey": "PredictiveIntelContentViews", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Content" + }, + "definitionKey": "PredictiveIntelContent", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "definitionKey": "PredictiveIntelContentAttribs", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "definitionKey": "PredictiveIntelAbandonedCartItems", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "definitionKey": "PredictiveIntelSessionEnds", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "definitionKey": "EinsteinMCPredictiveScores", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Scores" + }, + "definitionKey": "PredictiveIntelScores", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Product Views" + }, + "definitionKey": "PredictiveIntelProductViews", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "definitionKey": "PredictiveIntelProducts", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "definitionKey": "PredictiveIntelProductAttribs", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "definitionKey": "PredictiveIntelProductPurchases", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + }, + { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "definitionKey": "PredictiveIntelProfiles", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + } + ], + "isOwner": true, + "isPrimary": false, + "isSystemDefined": true, + "isHidden": false, + "canAddProperties": true, + "canAddRelationships": false, + "containsSchemaAttributes": false, + "canRemove": false, + "canChangeProperties": true, + "displayOrder": 7, + "requiredRelationships": [ + "1586d645-31e2-e611-80cc-1402ec7222b4", + "2686d645-31e2-e611-80cc-1402ec7222b4", + "3586d645-31e2-e611-80cc-1402ec7222b4", + "4686d645-31e2-e611-80cc-1402ec7222b4", + "5d86d645-31e2-e611-80cc-1402ec7222b4", + "6c86d645-31e2-e611-80cc-1402ec7222b4", + "7887d645-31e2-e611-80cc-1402ec7222b4", + "7d86d645-31e2-e611-80cc-1402ec7222b4", + "c80f6472-c416-ec11-b839-48df37d1dc79", + "a985d645-31e2-e611-80cc-1402ec7222b4", + "ba85d645-31e2-e611-80cc-1402ec7222b4", + "cd85d645-31e2-e611-80cc-1402ec7222b4", + "0086d645-31e2-e611-80cc-1402ec7222b4", + "de85d645-31e2-e611-80cc-1402ec7222b4", + "fd85d645-31e2-e611-80cc-1402ec7222b4", + "9885d645-31e2-e611-80cc-1402ec7222b4" + ], + "applicationID": "aed181bc-d7b7-465e-a3dd-9cdfb13943e2", + "canModify": false, + "applicationKey": "com.sfmc-einstein.Einstein Engagement Scoring", + "attributeGroupIconKey": "PredictiveIntel", + "fullyQualifiedName": "Predictive Intelligence Data", + "attributeGroupType": "Standard", + "description": "Attribute Group for Einstein Engagement Scoring", + "localizedDescription": { + "resourceSetKey": "ContactsMeta.SystemAttributeGroupDescriptions", + "resourceValueKey": "ATTR_GROUP_DESC_ETPredictiveIntel", + "value": "Attribute Group for Einstein Engagement Scoring" + }, + "attributeCount": 112, + "definitionID": "e152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionName": { + "value": "Predictive Intelligence Data" + }, + "definitionKey": "ETPredictiveIntel", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "namespace": "" + } + ], + "responseContext": { + "operationStatus": "OK", + "schemaType": "Contacts", + "populateInternalProperties": false + }, + "requestServiceMessageID": "9dac2279-40db-4e67-a862-d6ecbadf109a", + "responseDateTime": "2023-07-12T09:17:31.8837381-06:00", + "resultMessages": [], + "serviceMessageID": "92930c00-cacf-41e1-ba8d-04ad4d903f65" +} diff --git a/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json b/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json new file mode 100644 index 000000000..8e5dc97ff --- /dev/null +++ b/test/resources/9999999/hub/v1/contacts/schema/setDefinitions/get-response.json @@ -0,0 +1,19807 @@ +{ + "setDefinition": [ + { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "1386d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Product Sessions.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "1386d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "setDefinitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "parentIdentifier": "0b86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "session_id", + "localizedDescription": { + "value": "session_id" + }, + "definitionID": "1086d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "session_id", + "definitionName": { + "value": "Session ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Product Sessions.Session ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "1086d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "session_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "1ca32e3d-4f4e-4771-8d99-057f8bad3733" + }, + "valueDefinitionID": "1086d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "session_id", + "name": "Session ID", + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "setDefinitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "parentIdentifier": "0b86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "user_id", + "localizedDescription": { + "value": "user_id" + }, + "definitionID": "1286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "User_ID", + "definitionName": { + "value": "User ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Product Sessions.User ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "1286d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "user_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "f2e9ddf5-e18d-43db-ad52-cc754c929811" + }, + "valueDefinitionID": "1286d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "User_ID", + "name": "User ID", + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "setDefinitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "parentIdentifier": "0b86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "Batch_ID", + "localizedDescription": { + "value": "Batch_ID" + }, + "definitionID": "0c86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Batch_ID", + "definitionName": { + "value": "Batch ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Product Sessions.Batch ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "0c86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Batch_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "fed66cad-7da4-469c-b49c-79e8c82ae37f" + }, + "valueDefinitionID": "0c86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Batch_ID", + "name": "Batch ID", + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "setDefinitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "parentIdentifier": "0b86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "List_ID", + "localizedDescription": { + "value": "List_ID" + }, + "definitionID": "0f86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "List_ID", + "definitionName": { + "value": "List ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Product Sessions.List ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "0f86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "List_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "39471713-05c1-43d5-ac0f-9ecb66bae213" + }, + "valueDefinitionID": "0f86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "List_ID", + "name": "List ID", + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "setDefinitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "parentIdentifier": "0b86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "Job_ID", + "localizedDescription": { + "value": "Job_ID" + }, + "definitionID": "0d86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Job_ID", + "definitionName": { + "value": "Job ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Product Sessions.Job ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "0d86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Job_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "5c73cf1c-8fbd-4275-bca1-5a232c5ebb35" + }, + "valueDefinitionID": "0d86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Job_ID", + "name": "Job ID", + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "setDefinitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "parentIdentifier": "0b86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "Landing_URL_ID", + "localizedDescription": { + "value": "Landing_URL_ID" + }, + "definitionID": "0e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Landing_URL_ID", + "definitionName": { + "value": "Landing URL ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "Predictive Intelligence Product Sessions.Landing URL ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "0e86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Landing_URL_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "60fd37ce-3306-4197-a0e2-7c1b51b46d3a" + }, + "valueDefinitionID": "0e86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Landing_URL_ID", + "name": "Landing URL ID", + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "setDefinitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "parentIdentifier": "0b86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "Subscriber_ID", + "localizedDescription": { + "value": "Subscriber_ID" + }, + "definitionID": "1186d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Subscriber_ID", + "definitionName": { + "value": "Subscriber_ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "Predictive Intelligence Product Sessions.Subscriber_ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "1186d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 8, + "parentDefinition": { + "definitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductSessions", + "definitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Subscriber_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "f239f3c3-3ecc-4ec4-a4c9-de258fdefdea" + }, + "valueDefinitionID": "1186d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Subscriber_ID", + "name": "Subscriber_ID", + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "setDefinitionName": { + "value": "Predictive Intelligence Product Sessions" + }, + "parentIdentifier": "0b86d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Product Sessions", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageLogicalType": "DataExtension", + "storageName": "PI_SESSIONS", + "storageObjectIDs": ["0286d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "dd52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductSessions", + "name": "Predictive Intelligence Product Sessions" + }, + { + "definitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailAddresses", + "definitionName": { + "value": "Email Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "8f93dc39-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "4" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "1151de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "1151de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "1451de3f-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Number", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "1251de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ListID", + "definitionName": { + "value": "List ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 0, + "fullyQualifiedName": "Email Addresses.List ID", + "isHidden": true, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 0, + "parentDefinition": { + "definitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailAddresses", + "definitionName": { + "value": "Email Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ListID", + "valueDefinitionID": "1251de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ListID", + "name": "List ID", + "setDefinitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailAddresses", + "setDefinitionName": { + "value": "Email Addresses" + }, + "parentIdentifier": "1051de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Number", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "1351de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MemberID", + "definitionName": { + "value": "Member ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 0, + "fullyQualifiedName": "Email Addresses.Member ID", + "isHidden": true, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 0, + "parentDefinition": { + "definitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailAddresses", + "definitionName": { + "value": "Email Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "MemberID_", + "valueDefinitionID": "1351de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "MemberID", + "name": "Member ID", + "setDefinitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailAddresses", + "setDefinitionName": { + "value": "Email Addresses" + }, + "parentIdentifier": "1051de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "customerDataID": 4, + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "EmailAddress", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "1151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailAddress", + "definitionName": { + "value": "Email Address" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Email Addresses.Email Address", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailAddresses", + "definitionName": { + "value": "Email Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "EmailAddr_", + "valueDefinitionID": "1151de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "EmailAddress", + "name": "Email Address", + "setDefinitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailAddresses", + "setDefinitionName": { + "value": "Email Addresses" + }, + "parentIdentifier": "1051de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Boolean", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b951de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "HTMLEnabled", + "definitionName": { + "value": "HTML Enabled" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Email Addresses.HTML Enabled", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 2, + "parentDefinition": { + "definitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailAddresses", + "definitionName": { + "value": "Email Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "IsHTMLEnabled", + "valueDefinitionID": "b951de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "HTMLEnabled", + "name": "HTML Enabled", + "setDefinitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailAddresses", + "setDefinitionName": { + "value": "Email Addresses" + }, + "parentIdentifier": "1051de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "b2ca1f50-3cc4-4fd7-a3a3-88bf09fb59fa", + "applicationKey": "com.exacttarget.email", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "localizedDescription": {}, + "fullyQualifiedName": "Email Addresses", + "isCustomObjectBacked": false, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isSystemDefined": true, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageObjectIDs": [ + "92492fc1-7a08-4c96-8536-0344719009e1", + "c336765a-f24f-49b2-8a1f-b54f903def2a" + ], + "setDefinitionID": "1051de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailAddresses", + "name": "Email Addresses" + }, + { + "definitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentViews", + "definitionName": { + "value": "Predictive Intelligence Content Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "1f86d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "3086d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "3586d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "2486d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Content Views.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentViews", + "definitionName": { + "value": "Predictive Intelligence Content Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "2486d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentViews", + "setDefinitionName": { + "value": "Predictive Intelligence Content Views" + }, + "parentIdentifier": "1e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "content_id", + "localizedDescription": { + "value": "content_id" + }, + "definitionID": "1f86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Content_ID", + "definitionName": { + "value": "Content ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Content Views.Content ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "1f86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentViews", + "definitionName": { + "value": "Predictive Intelligence Content Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "content_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "1abf7b9d-1222-469f-9df9-7835829ec41f" + }, + "valueDefinitionID": "1f86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Content_ID", + "name": "Content ID", + "setDefinitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentViews", + "setDefinitionName": { + "value": "Predictive Intelligence Content Views" + }, + "parentIdentifier": "1e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "user_Id", + "localizedDescription": { + "value": "user_Id" + }, + "definitionID": "2386d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "User_ID", + "definitionName": { + "value": "User ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Content Views.User ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2386d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentViews", + "definitionName": { + "value": "Predictive Intelligence Content Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "user_Id", + "storageFieldReferenceID": { + "type": "guid", + "value": "a6c60012-6673-4402-8262-c6f06e1b0d13" + }, + "valueDefinitionID": "2386d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "User_ID", + "name": "User ID", + "setDefinitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentViews", + "setDefinitionName": { + "value": "Predictive Intelligence Content Views" + }, + "parentIdentifier": "1e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "session_id", + "localizedDescription": { + "value": "session_id" + }, + "definitionID": "2186d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Session_ID", + "definitionName": { + "value": "Session ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Content Views.Session ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2186d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentViews", + "definitionName": { + "value": "Predictive Intelligence Content Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "session_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "78820841-1579-42dd-8300-3cfe4eec96cc" + }, + "valueDefinitionID": "2186d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Session_ID", + "name": "Session ID", + "setDefinitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentViews", + "setDefinitionName": { + "value": "Predictive Intelligence Content Views" + }, + "parentIdentifier": "1e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Search", + "localizedDescription": { + "value": "Search" + }, + "definitionID": "2086d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Search", + "definitionName": { + "value": "Search" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Content Views.Search", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 1000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2086d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentViews", + "definitionName": { + "value": "Predictive Intelligence Content Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Search", + "storageFieldReferenceID": { + "type": "guid", + "value": "f1ecc397-6be7-4a53-8792-0fdbaff63505" + }, + "valueDefinitionID": "2086d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Search", + "name": "Search", + "setDefinitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentViews", + "setDefinitionName": { + "value": "Predictive Intelligence Content Views" + }, + "parentIdentifier": "1e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Date", + "description": "Timestamp", + "localizedDescription": { + "value": "Timestamp" + }, + "definitionID": "2286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Timestamp", + "definitionName": { + "value": "Timestamp" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Content Views.Timestamp", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2286d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentViews", + "definitionName": { + "value": "Predictive Intelligence Content Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Timestamp", + "storageFieldReferenceID": { + "type": "guid", + "value": "e5c8ef5d-f2df-464d-b0ba-aa06536ac934" + }, + "valueDefinitionID": "2286d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Timestamp", + "name": "Timestamp", + "setDefinitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentViews", + "setDefinitionName": { + "value": "Predictive Intelligence Content Views" + }, + "parentIdentifier": "1e86d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Content Views", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageLogicalType": "DataExtension", + "storageName": "PI_CONTENTVIEWS", + "storageObjectIDs": ["1786d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "da52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentViews", + "name": "Predictive Intelligence Content Views" + }, + { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "4351de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "2" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "2f51de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "4651de3f-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "3651de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "3452de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "4352de3f-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "2c51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CarrierID", + "definitionName": { + "value": "Carrier ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "MobileConnect Demographics.Carrier ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2c51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 1, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CarrierID", + "storageFieldReferenceID": { + "type": "guid", + "value": "3fdc8842-cc0f-407c-a3ec-930d7a027d1d" + }, + "valueDefinitionID": "2c51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CarrierID", + "name": "Carrier ID", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "2d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Channel", + "definitionName": { + "value": "Channel" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "MobileConnect Demographics.Channel", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 20, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Channel", + "storageFieldReferenceID": { + "type": "guid", + "value": "ef36ded9-67b2-4daf-899f-6862af8e5ee7" + }, + "valueDefinitionID": "2d51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Channel", + "name": "Channel", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "2e51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "City", + "definitionName": { + "value": "City" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "MobileConnect Demographics.City", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2e51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_City", + "storageFieldReferenceID": { + "type": "guid", + "value": "be7b4554-bf03-4a80-9101-3e396b2e345f" + }, + "valueDefinitionID": "2e51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "City", + "name": "City", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "2f51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ContactID", + "definitionName": { + "value": "Contact ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "MobileConnect Demographics.Contact ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2f51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ContactID", + "storageFieldReferenceID": { + "type": "guid", + "value": "b0e31883-cae8-4bc5-aa24-88565d375a18" + }, + "valueDefinitionID": "2f51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ContactID", + "name": "Contact ID", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedBy", + "definitionName": { + "value": "Created By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "MobileConnect Demographics.Created By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3151de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "1671a32a-8eb0-4dc5-b30d-8ad16e55a601" + }, + "valueDefinitionID": "3151de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedBy", + "name": "Created By", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3251de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedDate", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "MobileConnect Demographics.Created Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3251de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "de543ca5-5920-4309-adb9-33472144defe" + }, + "valueDefinitionID": "3251de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedDate", + "name": "Created Date", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3351de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "FirstName", + "definitionName": { + "value": "First Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "MobileConnect Demographics.First Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3351de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 9, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_FirstName", + "storageFieldReferenceID": { + "type": "guid", + "value": "125f7c91-2f11-44bd-9687-f22cf2461496" + }, + "valueDefinitionID": "3351de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "FirstName", + "name": "First Name", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "defaultValue": "False", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3451de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "IsHonorDST", + "definitionName": { + "value": "Is Honor DST" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "MobileConnect Demographics.Is Honor DST", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3451de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_IsHonorDST", + "storageFieldReferenceID": { + "type": "guid", + "value": "17abe00a-4306-43c5-b27f-a81f015d6dfb" + }, + "valueDefinitionID": "3451de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "IsHonorDST", + "name": "Is Honor DST", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "LastName", + "definitionName": { + "value": "Last Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "MobileConnect Demographics.Last Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3551de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 11, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_LastName", + "storageFieldReferenceID": { + "type": "guid", + "value": "e31f18f4-5422-410b-adcc-1b60f61cce5f" + }, + "valueDefinitionID": "3551de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "LastName", + "name": "Last Name", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CountryCode", + "definitionName": { + "value": "Locale" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 12, + "fullyQualifiedName": "MobileConnect Demographics.Locale", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 2, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3051de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 12, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CountryCode", + "storageFieldReferenceID": { + "type": "guid", + "value": "4b5fda70-47cb-4f4b-8ba6-f5cac53ee344" + }, + "valueDefinitionID": "3051de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CountryCode", + "name": "Locale", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "2ddd5f89-bca1-ed11-b852-48df37d1df5b", + "definitionKey": "MobileID", + "definitionName": { + "value": "Mobile ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 13, + "fullyQualifiedName": "MobileConnect Demographics.Mobile ID", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 13, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_MobileId", + "valueDefinitionID": "2ddd5f89-bca1-ed11-b852-48df37d1df5b", + "valueDefinitionKey": "MobileID", + "name": "Mobile ID", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "customerDataID": 5, + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Phone", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3651de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileNumber", + "definitionName": { + "value": "Mobile Number" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 14, + "fullyQualifiedName": "MobileConnect Demographics.Mobile Number", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 15, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3651de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 14, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_MobileNumber", + "storageFieldReferenceID": { + "type": "guid", + "value": "e31a7e3b-e943-440e-9be6-77224a4928fe" + }, + "valueDefinitionID": "3651de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "MobileNumber", + "name": "Mobile Number", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3751de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedBy", + "definitionName": { + "value": "Modified By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 15, + "fullyQualifiedName": "MobileConnect Demographics.Modified By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3751de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 15, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "a9be58ef-884d-44f4-9926-d73ebe587847" + }, + "valueDefinitionID": "3751de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedBy", + "name": "Modified By", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3851de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedDate", + "definitionName": { + "value": "Modified Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 16, + "fullyQualifiedName": "MobileConnect Demographics.Modified Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3851de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 16, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "216659c1-9512-47de-a9ee-822f48148514" + }, + "valueDefinitionID": "3851de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedDate", + "name": "Modified Date", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3951de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Priority", + "definitionName": { + "value": "Priority" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 17, + "fullyQualifiedName": "MobileConnect Demographics.Priority", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3951de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 17, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Priority", + "storageFieldReferenceID": { + "type": "guid", + "value": "71153ee5-a33f-4cf6-a963-0c3a893d9348" + }, + "valueDefinitionID": "3951de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Priority", + "name": "Priority", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3a51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Source", + "definitionName": { + "value": "Source" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 18, + "fullyQualifiedName": "MobileConnect Demographics.Source", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3a51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 18, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 5, + "storageName": "_Source", + "storageFieldReferenceID": { + "type": "guid", + "value": "f6bafdfb-86bf-45e8-9b76-b878c904d6c5" + }, + "valueDefinitionID": "3a51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Source", + "name": "Source", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SourceObjectID", + "definitionName": { + "value": "Source Object ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 19, + "fullyQualifiedName": "MobileConnect Demographics.Source Object ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 19, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_SourceObjectId", + "storageFieldReferenceID": { + "type": "guid", + "value": "c67a7922-44e5-4c4b-a4c8-2ac3550a5f07" + }, + "valueDefinitionID": "3b51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SourceObjectID", + "name": "Source Object ID", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 4, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "67ace0e3-8563-e811-80d4-1402ec721f75", + "definitionKey": "SFContactID", + "definitionName": { + "value": "SFContactID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 19, + "fullyQualifiedName": "MobileConnect Demographics.SFContactID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "67ace0e3-8563-e811-80d4-1402ec721f75" + }, + "ordinal": 19, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "SFContactID", + "storageFieldReferenceID": { + "type": "guid", + "value": "ce5a90ea-88eb-4683-9a1a-5c776b5763ce" + }, + "valueDefinitionID": "67ace0e3-8563-e811-80d4-1402ec721f75", + "valueDefinitionKey": "SFContactID", + "name": "SFContactID", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3c51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "State", + "definitionName": { + "value": "State" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 20, + "fullyQualifiedName": "MobileConnect Demographics.State", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3c51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 20, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_State", + "storageFieldReferenceID": { + "type": "guid", + "value": "c0ea1fac-d939-4dde-b45a-16586f661924" + }, + "valueDefinitionID": "3c51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "State", + "name": "State", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Status", + "definitionName": { + "value": "Status" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 21, + "fullyQualifiedName": "MobileConnect Demographics.Status", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 21, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 6, + "storageName": "_Status", + "storageFieldReferenceID": { + "type": "guid", + "value": "fafff407-c055-411c-81ec-78907f5dbd58" + }, + "valueDefinitionID": "3d51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Status", + "name": "Status", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3e51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "UTCOffset", + "definitionName": { + "value": "UTC Offset" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 22, + "fullyQualifiedName": "MobileConnect Demographics.UTC Offset", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 4, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3e51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 22, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 2, + "storageName": "_UTCOffset", + "storageFieldReferenceID": { + "type": "guid", + "value": "84d29656-a348-43c2-ac2f-8c7ec5b18a3e" + }, + "valueDefinitionID": "3e51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "UTCOffset", + "name": "UTC Offset", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3f51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ZipCode", + "definitionName": { + "value": "Zip Code" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 23, + "fullyQualifiedName": "MobileConnect Demographics.Zip Code", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 20, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3f51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 23, + "parentDefinition": { + "definitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileDemographics", + "definitionName": { + "value": "MobileConnect Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ZipCode", + "storageFieldReferenceID": { + "type": "guid", + "value": "11ce9d05-a1e3-47ba-9077-11097e0b4c8d" + }, + "valueDefinitionID": "3f51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ZipCode", + "name": "Zip Code", + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "setDefinitionName": { + "value": "MobileConnect Demographics" + }, + "parentIdentifier": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "e25893f9-08f3-480f-8def-7f8ab0583611", + "applicationKey": "com.exacttarget.mobileconnect", + "attributeCount": 0, + "canAddValues": true, + "canChangeValues": true, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "MobileConnect Demographics", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": true, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 2, + "sendAttributeStorageName": "_ContactID", + "sendContactKeyStorageName": "_SubscriberID", + "storageLogicalType": "MobileAttributes", + "storageName": "_MobileAddress", + "storageObjectIDs": ["1651de3f-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "7693dc39-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "2b51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileDemographics", + "name": "MobileConnect Demographics" + }, + { + "definitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContent", + "definitionName": { + "value": "Predictive Intelligence Content" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "3086d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "4286d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "4686d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3386d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Content.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContent", + "definitionName": { + "value": "Predictive Intelligence Content" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "3386d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContent", + "setDefinitionName": { + "value": "Predictive Intelligence Content" + }, + "parentIdentifier": "2e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "content_id", + "localizedDescription": { + "value": "content_id" + }, + "definitionID": "3086d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Content_ID", + "definitionName": { + "value": "Content ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Content.Content ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3086d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContent", + "definitionName": { + "value": "Predictive Intelligence Content" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "content_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "9fd67d4d-cae5-4230-8cf1-f19cd230a233" + }, + "valueDefinitionID": "3086d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Content_ID", + "name": "Content ID", + "setDefinitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContent", + "setDefinitionName": { + "value": "Predictive Intelligence Content" + }, + "parentIdentifier": "2e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Boolean", + "description": "availability", + "localizedDescription": { + "value": "availability" + }, + "definitionID": "2f86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Availability", + "definitionName": { + "value": "Availability" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Content.Availability", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "2f86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContent", + "definitionName": { + "value": "Predictive Intelligence Content" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "availability", + "storageFieldReferenceID": { + "type": "guid", + "value": "d32b9706-78a0-40fd-aae5-e345b1f217a6" + }, + "valueDefinitionID": "2f86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Availability", + "name": "Availability", + "setDefinitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContent", + "setDefinitionName": { + "value": "Predictive Intelligence Content" + }, + "parentIdentifier": "2e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "title", + "localizedDescription": { + "value": "title" + }, + "definitionID": "3186d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Title", + "definitionName": { + "value": "Title" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Content.Title", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 1000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3186d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContent", + "definitionName": { + "value": "Predictive Intelligence Content" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "title", + "storageFieldReferenceID": { + "type": "guid", + "value": "93497a91-7e2d-4c5f-8546-fd035fea3e92" + }, + "valueDefinitionID": "3186d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Title", + "name": "Title", + "setDefinitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContent", + "setDefinitionName": { + "value": "Predictive Intelligence Content" + }, + "parentIdentifier": "2e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "uuid", + "localizedDescription": { + "value": "uuid" + }, + "definitionID": "3286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "UUID", + "definitionName": { + "value": "UUID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Content.UUID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3286d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContent", + "definitionName": { + "value": "Predictive Intelligence Content" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "uuid", + "storageFieldReferenceID": { + "type": "guid", + "value": "d42586c8-bb5b-46a1-ac88-32fc232dbcc7" + }, + "valueDefinitionID": "3286d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "UUID", + "name": "UUID", + "setDefinitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContent", + "setDefinitionName": { + "value": "Predictive Intelligence Content" + }, + "parentIdentifier": "2e86d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Content", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageLogicalType": "DataExtension", + "storageName": "PI_CONTENT", + "storageObjectIDs": ["2886d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "db52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "2e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContent", + "name": "Predictive Intelligence Content" + }, + { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3252de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedBy", + "definitionName": { + "value": "Created By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "MobileConnect Subscriptions.Created By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3252de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 1, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "a64a3ed9-b8fd-46cc-a10b-1d5fdf074ce6" + }, + "valueDefinitionID": "3252de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedBy", + "name": "Created By", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedDate", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "MobileConnect Subscriptions.Created Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3352de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "dfc3f6fb-a250-4ef8-93ed-bb079ced468d" + }, + "valueDefinitionID": "3352de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedDate", + "name": "Created Date", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3f52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SubscriptionDefinitionID", + "definitionName": { + "value": "Keyword" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "MobileConnect Subscriptions.Keyword", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3f52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 7, + "storageName": "_SubscriptionDefinitionID", + "storageFieldReferenceID": { + "type": "guid", + "value": "c13ab46d-6e65-475a-990d-291bd43e5063" + }, + "valueDefinitionID": "3f52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SubscriptionDefinitionID", + "name": "Keyword", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Phone", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileNumber", + "definitionName": { + "value": "Mobile Number" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "MobileConnect Subscriptions.Mobile Number", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 15, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3452de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_MobileNumber", + "storageFieldReferenceID": { + "type": "guid", + "value": "ead8a6d2-bc6c-4768-a6e3-c3cc749bfc1d" + }, + "valueDefinitionID": "3452de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "MobileNumber", + "name": "Mobile Number", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "53dd5f89-bca1-ed11-b852-48df37d1df5b", + "definitionKey": "MobileSubscriptionID", + "definitionName": { + "value": "Mobile Subscription ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "MobileConnect Subscriptions.Mobile Subscription ID", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 5, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_MobileSubscriptionID", + "valueDefinitionID": "53dd5f89-bca1-ed11-b852-48df37d1df5b", + "valueDefinitionKey": "MobileSubscriptionID", + "name": "Mobile Subscription ID", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3552de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedBy", + "definitionName": { + "value": "Modified By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "MobileConnect Subscriptions.Modified By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3552de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "30d7ec39-85d1-46dc-9888-771f11ffe10d" + }, + "valueDefinitionID": "3552de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedBy", + "name": "Modified By", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedDate", + "definitionName": { + "value": "Modified Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "MobileConnect Subscriptions.Modified Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3652de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "b68155cc-e483-4949-82f9-fb47cbd59764" + }, + "valueDefinitionID": "3652de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedDate", + "name": "Modified Date", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3752de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInDate", + "definitionName": { + "value": "Opt In Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "MobileConnect Subscriptions.Opt In Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3752de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 8, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptInDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "8da557ee-7ba7-44f4-99ba-0681cbeb1ba1" + }, + "valueDefinitionID": "3752de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInDate", + "name": "Opt In Date", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3852de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInMethodID", + "definitionName": { + "value": "Opt In Method" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "MobileConnect Subscriptions.Opt In Method", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3852de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 9, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 2, + "storageName": "_OptInMethodID", + "storageFieldReferenceID": { + "type": "guid", + "value": "da2713ab-a802-4cd6-9e05-0a7444d62388" + }, + "valueDefinitionID": "3852de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInMethodID", + "name": "Opt In Method", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3952de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInStatusID", + "definitionName": { + "value": "Opt In Status" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "MobileConnect Subscriptions.Opt In Status", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3952de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 1, + "storageName": "_OptInStatusID", + "storageFieldReferenceID": { + "type": "guid", + "value": "c733b80d-2ed5-4fb6-94a3-9c996cbae558" + }, + "valueDefinitionID": "3952de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInStatusID", + "name": "Opt In Status", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3a52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptOutDate", + "definitionName": { + "value": "Opt Out Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "MobileConnect Subscriptions.Opt Out Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3a52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 11, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptOutDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "27c3ccec-47ad-4578-9051-a41f85178049" + }, + "valueDefinitionID": "3a52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptOutDate", + "name": "Opt Out Date", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3b52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptOutMethodID", + "definitionName": { + "value": "Opt Out Method" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 12, + "fullyQualifiedName": "MobileConnect Subscriptions.Opt Out Method", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3b52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 12, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 4, + "storageName": "_OptOutMethodID", + "storageFieldReferenceID": { + "type": "guid", + "value": "089b96fc-bfc6-402e-a481-1e18d3e18a8d" + }, + "valueDefinitionID": "3b52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptOutMethodID", + "name": "Opt Out Method", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3c52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptOutStatusID", + "definitionName": { + "value": "Opt Out Status" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 13, + "fullyQualifiedName": "MobileConnect Subscriptions.Opt Out Status", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3c52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 13, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 3, + "storageName": "_OptOutStatusID", + "storageFieldReferenceID": { + "type": "guid", + "value": "67194503-acd8-4c1c-b042-9dfb3f3ebd44" + }, + "valueDefinitionID": "3c52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptOutStatusID", + "name": "Opt Out Status", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3d52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Source", + "definitionName": { + "value": "Source" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 14, + "fullyQualifiedName": "MobileConnect Subscriptions.Source", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3d52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 14, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 5, + "storageName": "_Source", + "storageFieldReferenceID": { + "type": "guid", + "value": "2e903257-43e8-4a7b-8ed4-757ca772ddbb" + }, + "valueDefinitionID": "3d52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Source", + "name": "Source", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "3e52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SourceObjectID", + "definitionName": { + "value": "Source Object ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 15, + "fullyQualifiedName": "MobileConnect Subscriptions.Source Object ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3e52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 15, + "parentDefinition": { + "definitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "MobileSubscriptions", + "definitionName": { + "value": "MobileConnect Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_SourceObjectId", + "storageFieldReferenceID": { + "type": "guid", + "value": "1d4f26f5-ec91-46de-9fc1-d819832f07e7" + }, + "valueDefinitionID": "3e52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SourceObjectID", + "name": "Source Object ID", + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "setDefinitionName": { + "value": "MobileConnect Subscriptions" + }, + "parentIdentifier": "3152de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "e25893f9-08f3-480f-8def-7f8ab0583611", + "applicationKey": "com.exacttarget.mobileconnect", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "MobileConnect Subscriptions", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageLogicalType": "DataExtension", + "storageName": "_MobileSubscription", + "storageObjectIDs": ["2252de3f-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "7793dc39-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "3152de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "MobileSubscriptions", + "name": "MobileConnect Subscriptions" + }, + { + "definitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentAttribs", + "definitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "4486d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Content Attributes.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentAttribs", + "definitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "4486d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "parentIdentifier": "3e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "content_id", + "localizedDescription": { + "value": "content_id" + }, + "definitionID": "4286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Content_ID", + "definitionName": { + "value": "Content ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Content Attributes.Content ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "4286d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentAttribs", + "definitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "content_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "d1abd045-4670-41f2-a368-9e0a6f732146" + }, + "valueDefinitionID": "4286d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Content_ID", + "name": "Content ID", + "setDefinitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "parentIdentifier": "3e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "AttribName", + "localizedDescription": { + "value": "AttribName" + }, + "definitionID": "3f86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_Name", + "definitionName": { + "value": "Attribute Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Content Attributes.Attribute Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 1000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "3f86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentAttribs", + "definitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "AttribName", + "storageFieldReferenceID": { + "type": "guid", + "value": "a55251d7-c1c5-49b3-bdc1-8ebdbf7cb517" + }, + "valueDefinitionID": "3f86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_Name", + "name": "Attribute Name", + "setDefinitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "parentIdentifier": "3e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "AttribValue", + "localizedDescription": { + "value": "AttribValue" + }, + "definitionID": "4186d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_Value", + "definitionName": { + "value": "Attribute Value" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Content Attributes.Attribute Value", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 1000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "4186d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentAttribs", + "definitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "AttribValue", + "storageFieldReferenceID": { + "type": "guid", + "value": "1742dd68-39af-4da9-ace4-0ad50ae08f05" + }, + "valueDefinitionID": "4186d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_Value", + "name": "Attribute Value", + "setDefinitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "parentIdentifier": "3e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Date", + "description": "updated_at", + "localizedDescription": { + "value": "updated_at" + }, + "definitionID": "4386d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Updated_At", + "definitionName": { + "value": "Updated At" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Content Attributes.Updated At", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "4386d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentAttribs", + "definitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "updated_at", + "storageFieldReferenceID": { + "type": "guid", + "value": "4ad58eb4-5e13-4064-ae43-71ab9786be00" + }, + "valueDefinitionID": "4386d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Updated_At", + "name": "Updated At", + "setDefinitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "parentIdentifier": "3e86d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Number", + "description": "attributeValueIndex", + "localizedDescription": { + "value": "attributeValueIndex" + }, + "definitionID": "4086d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_Value_Index", + "definitionName": { + "value": "Attribute Value Index" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Content Attributes.Attribute Value Index", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "4086d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelContentAttribs", + "definitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "attributeValueIndex", + "storageFieldReferenceID": { + "type": "guid", + "value": "3635848d-5e04-4fed-95ed-d487202a80b8" + }, + "valueDefinitionID": "4086d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_Value_Index", + "name": "Attribute Value Index", + "setDefinitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Content Attributes" + }, + "parentIdentifier": "3e86d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Content Attributes", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageLogicalType": "DataExtension", + "storageName": "PI_CONTENTATTRIBS", + "storageObjectIDs": ["3786d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "dc52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "3e86d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelContentAttribs", + "name": "Predictive Intelligence Content Attributes" + }, + { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "5286d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "5386d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "6686d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "6c86d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "6586d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "5b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Custom_Object_Key", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "5b86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Custom_Object_Key", + "name": "Custom Object Key", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "user_id", + "localizedDescription": { + "value": "user_id" + }, + "definitionID": "5a86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "user_id", + "definitionName": { + "value": "user_id" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.user_id", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "5a86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "user_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "e6f01b13-78b2-4cf7-956a-7a9a5db31a82" + }, + "valueDefinitionID": "5a86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "user_id", + "name": "user_id", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "cart_id", + "localizedDescription": { + "value": "cart_id" + }, + "definitionID": "5386d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Cart_ID", + "definitionName": { + "value": "Cart ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.Cart ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "5386d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "cart_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "3f7d9be8-3af9-425b-9537-442a9e389582" + }, + "valueDefinitionID": "5386d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Cart_ID", + "name": "Cart ID", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "contact_key", + "localizedDescription": { + "value": "contact_key" + }, + "definitionID": "5586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Contact_Key", + "definitionName": { + "value": "Contact Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.Contact Key", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "5586d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "contact_key", + "storageFieldReferenceID": { + "type": "guid", + "value": "7a8eb4a3-5270-4e28-9562-96067a13a6fd" + }, + "valueDefinitionID": "5586d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Contact_Key", + "name": "Contact Key", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "currency_type", + "localizedDescription": { + "value": "currency_type" + }, + "definitionID": "5686d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Currency_Type", + "definitionName": { + "value": "Currency Type" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.Currency Type", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "5686d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "currency_type", + "storageFieldReferenceID": { + "type": "guid", + "value": "32d910c3-7e8e-4cf6-af31-596b395246f0" + }, + "valueDefinitionID": "5686d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Currency_Type", + "name": "Currency Type", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Number", + "description": "no_items_cart", + "localizedDescription": { + "value": "no_items_cart" + }, + "definitionID": "5886d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "No_Items_Cart", + "definitionName": { + "value": "No Items Cart" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.No Items Cart", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "5886d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "no_items_cart", + "storageFieldReferenceID": { + "type": "guid", + "value": "74f890d4-eb4b-46c1-9cd5-f2f89702825d" + }, + "valueDefinitionID": "5886d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "No_Items_Cart", + "name": "No Items Cart", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "cart_value", + "localizedDescription": { + "value": "cart_value" + }, + "definitionID": "5486d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Cart_Value", + "definitionName": { + "value": "Cart Value" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.Cart Value", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "5486d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 2, + "storageName": "cart_value", + "storageFieldReferenceID": { + "type": "guid", + "value": "dc3238a5-1546-47b1-95ac-cfebae4bb4b6" + }, + "valueDefinitionID": "5486d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Cart_Value", + "name": "Cart Value", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "getdate()", + "description": "timestamp", + "localizedDescription": { + "value": "timestamp" + }, + "definitionID": "5986d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Time_Stamp", + "definitionName": { + "value": "Time Stamp" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.Time Stamp", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "5986d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 8, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "timestamp", + "storageFieldReferenceID": { + "type": "guid", + "value": "e8051d08-f6e2-492b-9476-db03d0b4e71b" + }, + "valueDefinitionID": "5986d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Time_Stamp", + "name": "Time Stamp", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "email_address", + "localizedDescription": { + "value": "email_address" + }, + "definitionID": "5786d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "email_address", + "definitionName": { + "value": "email_address" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents.email_address", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "5786d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 9, + "parentDefinition": { + "definitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartEvents", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "email_address", + "storageFieldReferenceID": { + "type": "guid", + "value": "1a242f2d-4161-4713-b7b1-6426f26f5157" + }, + "valueDefinitionID": "5786d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "email_address", + "name": "email_address", + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartEvents" + }, + "parentIdentifier": "5286d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartEvents", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageLogicalType": "DataExtension", + "storageName": "PI_ABANDONED_CART_EVENT", + "storageObjectIDs": ["4886d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "df52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "5286d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartEvents", + "name": "Predictive Intelligence AbandonedCartEvents" + }, + { + "definitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartItems", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "6586d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "6686d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "6686d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "7887d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "6586d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "6a86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Custom_Object_Key", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartItems.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartItems", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "6a86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Custom_Object_Key", + "name": "Custom Object Key", + "setDefinitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartItems", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "parentIdentifier": "6586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "sku", + "localizedDescription": { + "value": "sku" + }, + "definitionID": "6986d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "sku", + "definitionName": { + "value": "sku" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartItems.sku", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "6986d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartItems", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "sku", + "storageFieldReferenceID": { + "type": "guid", + "value": "85feb2dd-3ea4-4e33-93ca-a0b2e129342f" + }, + "valueDefinitionID": "6986d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "sku", + "name": "sku", + "setDefinitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartItems", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "parentIdentifier": "6586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "cart_id", + "localizedDescription": { + "value": "cart_id" + }, + "definitionID": "6686d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "cart_id", + "definitionName": { + "value": "Cart ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartItems.Cart ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "6686d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartItems", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "cart_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "686a5045-b1b9-497f-9226-9e43b5b09906" + }, + "valueDefinitionID": "6686d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "cart_id", + "name": "Cart ID", + "setDefinitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartItems", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "parentIdentifier": "6586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "price", + "localizedDescription": { + "value": "price" + }, + "definitionID": "6786d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Price", + "definitionName": { + "value": "Price" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartItems.Price", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "6786d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartItems", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 2, + "storageName": "price", + "storageFieldReferenceID": { + "type": "guid", + "value": "9a62ef64-4993-4876-a16c-9786eae6fd53" + }, + "valueDefinitionID": "6786d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Price", + "name": "Price", + "setDefinitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartItems", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "parentIdentifier": "6586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Number", + "description": "quantity", + "localizedDescription": { + "value": "quantity" + }, + "definitionID": "6886d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Quantity", + "definitionName": { + "value": "Quantity" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartItems.Quantity", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "6886d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelAbandonedCartItems", + "definitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "quantity", + "storageFieldReferenceID": { + "type": "guid", + "value": "20d85be0-e56d-4888-b66e-bb8b6466d07c" + }, + "valueDefinitionID": "6886d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Quantity", + "name": "Quantity", + "setDefinitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartItems", + "setDefinitionName": { + "value": "Predictive Intelligence AbandonedCartItems" + }, + "parentIdentifier": "6586d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "6586d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence AbandonedCartItems", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageLogicalType": "DataExtension", + "storageName": "PI_ABANDONED_CART_ITEMS", + "storageObjectIDs": ["5f86d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "e052de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "6586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelAbandonedCartItems", + "name": "Predictive Intelligence AbandonedCartItems" + }, + { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "9351de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "2" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "7351de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "9651de3f-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "6f51de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "b452de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + }, + { + "leftAttributeID": "7751de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "b552de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "bc52de3f-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "6f51de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "c752de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + }, + { + "leftAttributeID": "7751de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "ca52de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "d052de3f-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "6e51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Alias", + "definitionName": { + "value": "Alias" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "MobilePush Demographics.Alias", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "6e51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 1, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Alias", + "storageFieldReferenceID": { + "type": "guid", + "value": "dcef58d9-dcaa-4a68-9ecf-6c663a57fb33" + }, + "valueDefinitionID": "6e51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Alias", + "name": "Alias", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "customerDataID": 7, + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "6f51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushAppID", + "definitionName": { + "value": "Application" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "MobilePush Demographics.Application", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 38, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "6f51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 11, + "storageName": "_APID", + "storageFieldReferenceID": { + "type": "guid", + "value": "4e82734e-ff8a-4868-a786-20e9596a94d2" + }, + "valueDefinitionID": "6f51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "PushAppID", + "name": "Application", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Number", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Badge", + "definitionName": { + "value": "Badge" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "MobilePush Demographics.Badge", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7051de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Badge", + "storageFieldReferenceID": { + "type": "guid", + "value": "ae73cf07-6b58-4ae4-a75e-ccd1d4bdb98f" + }, + "valueDefinitionID": "7051de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Badge", + "name": "Badge", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Channel", + "definitionName": { + "value": "Channel" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "MobilePush Demographics.Channel", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 20, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7151de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Channel", + "storageFieldReferenceID": { + "type": "guid", + "value": "84490d74-3c83-46b1-8a0b-b073dc45c208" + }, + "valueDefinitionID": "7151de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Channel", + "name": "Channel", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7251de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "City", + "definitionName": { + "value": "City" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "MobilePush Demographics.City", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7251de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_City", + "storageFieldReferenceID": { + "type": "guid", + "value": "905b7a96-ba4e-4265-a271-6b8d32fdf56e" + }, + "valueDefinitionID": "7251de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "City", + "name": "City", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7351de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ContactID", + "definitionName": { + "value": "Contact ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "MobilePush Demographics.Contact ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7351de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ContactID", + "storageFieldReferenceID": { + "type": "guid", + "value": "f5c616a4-6ba4-4c3f-a55b-85d12dd41932" + }, + "valueDefinitionID": "7351de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ContactID", + "name": "Contact ID", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7451de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedBy", + "definitionName": { + "value": "Created By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "MobilePush Demographics.Created By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7451de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "bf010c22-fd43-4303-a732-aff2510133f8" + }, + "valueDefinitionID": "7451de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedBy", + "name": "Created By", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedDate", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "MobilePush Demographics.Created Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7551de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 8, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "1b450c10-bd4e-448e-ae6f-583ac616cc46" + }, + "valueDefinitionID": "7551de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedDate", + "name": "Created Date", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "9151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "MobilePush Demographics.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 9, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "9151de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7651de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Device", + "definitionName": { + "value": "Device" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "MobilePush Demographics.Device", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7651de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Device", + "storageFieldReferenceID": { + "type": "guid", + "value": "1aa7b10f-f32a-4620-af79-4210aeacf996" + }, + "valueDefinitionID": "7651de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Device", + "name": "Device", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "customerDataID": 6, + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7751de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDeviceID", + "definitionName": { + "value": "Device ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "MobilePush Demographics.Device ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7751de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 11, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_DeviceID", + "storageFieldReferenceID": { + "type": "guid", + "value": "9d8db1d4-c00e-49bc-98d9-e30d2e3ed7cf" + }, + "valueDefinitionID": "7751de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "PushDeviceID", + "name": "Device ID", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7851de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "DeviceType", + "definitionName": { + "value": "Device Type" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 12, + "fullyQualifiedName": "MobilePush Demographics.Device Type", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 20, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7851de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 12, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_DeviceType", + "storageFieldReferenceID": { + "type": "guid", + "value": "75f38dcd-559f-4663-8e84-a5f85abc3e0a" + }, + "valueDefinitionID": "7851de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "DeviceType", + "name": "Device Type", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7951de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "FirstName", + "definitionName": { + "value": "First Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 13, + "fullyQualifiedName": "MobilePush Demographics.First Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7951de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 13, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_FirstName", + "storageFieldReferenceID": { + "type": "guid", + "value": "cf0e8f08-bba3-4ca3-b05c-e1360897f0f6" + }, + "valueDefinitionID": "7951de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "FirstName", + "name": "First Name", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7a51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "HardwareID", + "definitionName": { + "value": "Hardware ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 14, + "fullyQualifiedName": "MobilePush Demographics.Hardware ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7a51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 14, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_HardwareId", + "storageFieldReferenceID": { + "type": "guid", + "value": "a7c7ac11-c93d-4512-ae1b-25e9debbdddc" + }, + "valueDefinitionID": "7a51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "HardwareID", + "name": "Hardware ID", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "defaultValue": "False", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "IsHonorDST", + "definitionName": { + "value": "Is Honor DST" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 15, + "fullyQualifiedName": "MobilePush Demographics.Is Honor DST", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 15, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_IsHonorDST", + "storageFieldReferenceID": { + "type": "guid", + "value": "e5d1a20d-ec5a-40a2-a474-64513204cbac" + }, + "valueDefinitionID": "7b51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "IsHonorDST", + "name": "Is Honor DST", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7c51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "LastName", + "definitionName": { + "value": "Last Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 16, + "fullyQualifiedName": "MobilePush Demographics.Last Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7c51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 16, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_LastName", + "storageFieldReferenceID": { + "type": "guid", + "value": "92c01cad-907d-48c0-ac6a-691c12d62358" + }, + "valueDefinitionID": "7c51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "LastName", + "name": "Last Name", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "LocationEnabled", + "definitionName": { + "value": "Location Enabled" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 17, + "fullyQualifiedName": "MobilePush Demographics.Location Enabled", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 17, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_LocationEnabled", + "storageFieldReferenceID": { + "type": "guid", + "value": "30b5144d-9b73-4804-b17b-fbf4d2d03bfe" + }, + "valueDefinitionID": "7d51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "LocationEnabled", + "name": "Location Enabled", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7e51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedBy", + "definitionName": { + "value": "Modified By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 18, + "fullyQualifiedName": "MobilePush Demographics.Modified By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7e51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 18, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "46975e48-0dbb-4ec4-91e9-9823aa2a5d0a" + }, + "valueDefinitionID": "7e51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedBy", + "name": "Modified By", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7f51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedDate", + "definitionName": { + "value": "Modified Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 19, + "fullyQualifiedName": "MobilePush Demographics.Modified Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7f51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 19, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "4602d692-06de-4974-84e4-e8facfa25be9" + }, + "valueDefinitionID": "7f51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedDate", + "name": "Modified Date", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInDate", + "definitionName": { + "value": "Opt In Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 20, + "fullyQualifiedName": "MobilePush Demographics.Opt In Date", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8051de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 20, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptInDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "68c6681d-6f0f-4ec2-9407-55c5eb19fc19" + }, + "valueDefinitionID": "8051de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInDate", + "name": "Opt In Date", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInMethodID", + "definitionName": { + "value": "Opt In Method" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 21, + "fullyQualifiedName": "MobilePush Demographics.Opt In Method", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8151de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 21, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 9, + "storageName": "_OptInMethodID", + "storageFieldReferenceID": { + "type": "guid", + "value": "8b821a18-6cee-4204-9ef9-18d94112e84f" + }, + "valueDefinitionID": "8151de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInMethodID", + "name": "Opt In Method", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8251de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInStatusID", + "definitionName": { + "value": "Opt In Status" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 22, + "fullyQualifiedName": "MobilePush Demographics.Opt In Status", + "isHidden": true, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8251de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 22, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 8, + "storageName": "_OptInStatusID", + "storageFieldReferenceID": { + "type": "guid", + "value": "673470b8-8503-4c4c-b9ae-9bf554d0a235" + }, + "valueDefinitionID": "8251de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInStatusID", + "name": "Opt In Status", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8351de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptOutDate", + "definitionName": { + "value": "Opt Out Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 23, + "fullyQualifiedName": "MobilePush Demographics.Opt Out Date", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8351de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 23, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptOutDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "8424262e-6904-4915-a4b3-2957b044b3ee" + }, + "valueDefinitionID": "8351de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptOutDate", + "name": "Opt Out Date", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8451de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptOutMethodID", + "definitionName": { + "value": "Opt Out Method" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 24, + "fullyQualifiedName": "MobilePush Demographics.Opt Out Method", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8451de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 24, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 10, + "storageName": "_OptOutMethodID", + "storageFieldReferenceID": { + "type": "guid", + "value": "3919bba5-e953-435d-8874-66be31cb1821" + }, + "valueDefinitionID": "8451de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptOutMethodID", + "name": "Opt Out Method", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptOutStatusID", + "definitionName": { + "value": "Opt Out Status" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 25, + "fullyQualifiedName": "MobilePush Demographics.Opt Out Status", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8551de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 25, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptOutStatusID", + "storageFieldReferenceID": { + "type": "guid", + "value": "df789a9d-cfbc-4ed9-8a2b-e6427a631e28" + }, + "valueDefinitionID": "8551de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptOutStatusID", + "name": "Opt Out Status", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8651de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Platform", + "definitionName": { + "value": "Platform" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 26, + "fullyQualifiedName": "MobilePush Demographics.Platform", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8651de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 26, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Platform", + "storageFieldReferenceID": { + "type": "guid", + "value": "353dc3ed-7578-4ee1-a1c1-e843f8b487f5" + }, + "valueDefinitionID": "8651de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Platform", + "name": "Platform", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8751de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PlatformVersion", + "definitionName": { + "value": "Platform Version" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 27, + "fullyQualifiedName": "MobilePush Demographics.Platform Version", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8751de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 27, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_PlatformVersion", + "storageFieldReferenceID": { + "type": "guid", + "value": "99c03236-d908-498f-936a-6b7e110ef76a" + }, + "valueDefinitionID": "8751de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "PlatformVersion", + "name": "Platform Version", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8851de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ProviderToken", + "definitionName": { + "value": "Provider Token" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 28, + "fullyQualifiedName": "MobilePush Demographics.Provider Token", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8851de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 28, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ProviderToken", + "storageFieldReferenceID": { + "type": "guid", + "value": "03b1ac7c-3cc4-4b82-b3db-7e6b43cefd7c" + }, + "valueDefinitionID": "8851de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ProviderToken", + "name": "Provider Token", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8951de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Source", + "definitionName": { + "value": "Source" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 29, + "fullyQualifiedName": "MobilePush Demographics.Source", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8951de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 29, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 12, + "storageName": "_Source", + "storageFieldReferenceID": { + "type": "guid", + "value": "a0c5a9fe-d72b-41dd-9307-77db3da0b9f4" + }, + "valueDefinitionID": "8951de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Source", + "name": "Source", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8a51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SourceObjectID", + "definitionName": { + "value": "Source Object ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 30, + "fullyQualifiedName": "MobilePush Demographics.Source Object ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8a51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 30, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_SourceObjectId", + "storageFieldReferenceID": { + "type": "guid", + "value": "020d90c4-4c9c-4a00-b661-5b75ec0c9b88" + }, + "valueDefinitionID": "8a51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SourceObjectID", + "name": "Source Object ID", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8b51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "State", + "definitionName": { + "value": "State" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 31, + "fullyQualifiedName": "MobilePush Demographics.State", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8b51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 31, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_State", + "storageFieldReferenceID": { + "type": "guid", + "value": "e65c52fd-e623-45cc-bb7a-1842617c5491" + }, + "valueDefinitionID": "8b51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "State", + "name": "State", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8c51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Status", + "definitionName": { + "value": "Status" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 32, + "fullyQualifiedName": "MobilePush Demographics.Status", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8c51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 32, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 13, + "storageName": "_Status", + "storageFieldReferenceID": { + "type": "guid", + "value": "a1c13a7c-566e-487f-8cc9-439064b6bfb4" + }, + "valueDefinitionID": "8c51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Status", + "name": "Status", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SystemToken", + "definitionName": { + "value": "System Token" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 33, + "fullyQualifiedName": "MobilePush Demographics.System Token", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 4000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 33, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_SystemToken", + "storageFieldReferenceID": { + "type": "guid", + "value": "d7e80e54-124c-4260-986b-b32b58b8c0ee" + }, + "valueDefinitionID": "8d51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SystemToken", + "name": "System Token", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8e51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "TimeZone", + "definitionName": { + "value": "Time Zone" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 34, + "fullyQualifiedName": "MobilePush Demographics.Time Zone", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8e51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 34, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_TimeZone", + "storageFieldReferenceID": { + "type": "guid", + "value": "980d0010-a443-4044-9ca1-5d1cfeaedec7" + }, + "valueDefinitionID": "8e51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "TimeZone", + "name": "Time Zone", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8f51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "UTCOffset", + "definitionName": { + "value": "UTC Offset" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 35, + "fullyQualifiedName": "MobilePush Demographics.UTC Offset", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 4, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8f51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 35, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 2, + "storageName": "_UTCOffset", + "storageFieldReferenceID": { + "type": "guid", + "value": "5c7c2a61-80da-4233-b895-54fd7e957e48" + }, + "valueDefinitionID": "8f51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "UTCOffset", + "name": "UTC Offset", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "9051de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ZipCode", + "definitionName": { + "value": "Zip Code" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 36, + "fullyQualifiedName": "MobilePush Demographics.Zip Code", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 20, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "9051de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 36, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ZipCode", + "storageFieldReferenceID": { + "type": "guid", + "value": "ac282849-4bc1-4373-8412-16a5d9ab31e4" + }, + "valueDefinitionID": "9051de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ZipCode", + "name": "Zip Code", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Number", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "08b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "PushAddressExtensionID", + "definitionName": { + "value": "Push Address Extension ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 37, + "fullyQualifiedName": "MobilePush Demographics.Push Address Extension ID", + "isHidden": true, + "isIdentityValue": true, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 37, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "PushAddressExtensionId", + "valueDefinitionID": "08b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "PushAddressExtensionID", + "name": "Push Address Extension ID", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "09b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "DeviceLanguage", + "definitionName": { + "value": "Device Language" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 38, + "fullyQualifiedName": "MobilePush Demographics.Device Language", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": -1, + "ordinal": 38, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "DeviceLanguage", + "valueDefinitionID": "09b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "DeviceLanguage", + "name": "Device Language", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "0ab0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "GcmSenderId", + "definitionName": { + "value": "GCM Sender ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 39, + "fullyQualifiedName": "MobilePush Demographics.GCM Sender ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": -1, + "ordinal": 39, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "GcmSenderId", + "valueDefinitionID": "0ab0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "GcmSenderId", + "name": "GCM Sender ID", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "0bb0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "AppVersion", + "definitionName": { + "value": "Application Version" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 40, + "fullyQualifiedName": "MobilePush Demographics.Application Version", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": -1, + "ordinal": 40, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "AppVersion", + "valueDefinitionID": "0bb0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "AppVersion", + "name": "Application Version", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "0cb0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "SdkVersion", + "definitionName": { + "value": "SDK Version" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 41, + "fullyQualifiedName": "MobilePush Demographics.SDK Version", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": -1, + "ordinal": 41, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "SdkVersion", + "valueDefinitionID": "0cb0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "SdkVersion", + "name": "SDK Version", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "0db0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "LastAppOpen", + "definitionName": { + "value": "Last Application Open" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 42, + "fullyQualifiedName": "MobilePush Demographics.Last Application Open", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 42, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "LastAppOpen", + "valueDefinitionID": "0db0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "LastAppOpen", + "name": "Last Application Open", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "0eb0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "LastMessageOpen", + "definitionName": { + "value": "Last Message Open" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 43, + "fullyQualifiedName": "MobilePush Demographics.Last Message Open", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 43, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "LastMessageOpen", + "valueDefinitionID": "0eb0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "LastMessageOpen", + "name": "Last Message Open", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "0fb0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "LastSend", + "definitionName": { + "value": "Last Send" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 44, + "fullyQualifiedName": "MobilePush Demographics.Last Send", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 44, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "LastSend", + "valueDefinitionID": "0fb0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "LastSend", + "name": "Last Send", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Number", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "10b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "SendCount", + "definitionName": { + "value": "Send Count" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 45, + "fullyQualifiedName": "MobilePush Demographics.Send Count", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 45, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "SendCount", + "valueDefinitionID": "10b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "SendCount", + "name": "Send Count", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Number", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "11b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "MessageOpenCount", + "definitionName": { + "value": "Message Open Count" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 46, + "fullyQualifiedName": "MobilePush Demographics.Message Open Count", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 46, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "MessageOpenCount", + "valueDefinitionID": "11b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "MessageOpenCount", + "name": "Message Open Count", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "12b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "ProximityEnabled", + "definitionName": { + "value": "Proximity Enabled" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 47, + "fullyQualifiedName": "MobilePush Demographics.Proximity Enabled", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 47, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ProximityEnabled", + "valueDefinitionID": "12b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "ProximityEnabled", + "name": "Proximity Enabled", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "13b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "BackgroundRefreshEnabled", + "definitionName": { + "value": "Background Refresh Enabled" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 48, + "fullyQualifiedName": "MobilePush Demographics.Background Refresh Enabled", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 48, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "BackgroundRefreshEnabled", + "valueDefinitionID": "13b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "BackgroundRefreshEnabled", + "name": "Background Refresh Enabled", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "14b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "definitionKey": "QuietPushEnabled", + "definitionName": { + "value": "Quiet Push Enabled" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 49, + "fullyQualifiedName": "MobilePush Demographics.Quiet Push Enabled", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 49, + "parentDefinition": { + "definitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDemographics", + "definitionName": { + "value": "MobilePush Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "QuietPushEnabled", + "valueDefinitionID": "14b0ae24-ee46-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "QuietPushEnabled", + "name": "Quiet Push Enabled", + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "setDefinitionName": { + "value": "MobilePush Demographics" + }, + "parentIdentifier": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "2051892d-5de2-4ecf-98af-8ca9a40d2c9c", + "applicationKey": "com.exacttarget.mobilepush", + "attributeCount": 0, + "canAddValues": true, + "canChangeValues": true, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "MobilePush Demographics", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": true, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 3, + "sendAttributeStorageName": "_ContactID", + "sendContactKeyStorageName": "_SubscriberID", + "storageLogicalType": "PushAttributes", + "storageName": "_PushAddress", + "storageObjectIDs": [ + "4851de3f-31e2-e611-80cc-1402ec7222b4", + "9552de3f-31e2-e611-80cc-1402ec7222b4" + ], + "storageReferenceID": { + "type": "guid", + "value": "7893dc39-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "6d51de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushDemographics", + "name": "MobilePush Demographics" + }, + { + "definitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelSessionEnds", + "definitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7b86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Custom_Object_Key", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Session Ends.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelSessionEnds", + "definitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "7b86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Custom_Object_Key", + "name": "Custom Object Key", + "setDefinitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelSessionEnds", + "setDefinitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "parentIdentifier": "7586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "user_id", + "localizedDescription": { + "value": "user_id" + }, + "definitionID": "7a86d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "user_id", + "definitionName": { + "value": "User Id" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Session Ends.User Id", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7a86d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelSessionEnds", + "definitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "user_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "037a4978-3ce8-4311-95c3-b59d2e3f1a7f" + }, + "valueDefinitionID": "7a86d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "user_id", + "name": "User Id", + "setDefinitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelSessionEnds", + "setDefinitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "parentIdentifier": "7586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "session_id", + "localizedDescription": { + "value": "session_id" + }, + "definitionID": "7886d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "session_id", + "definitionName": { + "value": "Session Id" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Session Ends.Session Id", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7886d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelSessionEnds", + "definitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "session_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "67b9fcff-4136-4b07-b5f6-e86d616e4136" + }, + "valueDefinitionID": "7886d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "session_id", + "name": "Session Id", + "setDefinitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelSessionEnds", + "setDefinitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "parentIdentifier": "7586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "email_address", + "localizedDescription": { + "value": "email_address" + }, + "definitionID": "7786d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "email_address", + "definitionName": { + "value": "Email Address" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Session Ends.Email Address", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7786d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelSessionEnds", + "definitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "email_address", + "storageFieldReferenceID": { + "type": "guid", + "value": "8f1bc9c8-32a3-4b54-83aa-ffb6e56ec709" + }, + "valueDefinitionID": "7786d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "email_address", + "name": "Email Address", + "setDefinitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelSessionEnds", + "setDefinitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "parentIdentifier": "7586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "contact_key", + "localizedDescription": { + "value": "contact_key" + }, + "definitionID": "7686d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "contact_key", + "definitionName": { + "value": "Contact Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Session Ends.Contact Key", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7686d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelSessionEnds", + "definitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "contact_key", + "storageFieldReferenceID": { + "type": "guid", + "value": "0dc0b53e-ce26-4508-89b2-f9cb0ab8404a" + }, + "valueDefinitionID": "7686d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "contact_key", + "name": "Contact Key", + "setDefinitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelSessionEnds", + "setDefinitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "parentIdentifier": "7586d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "getdate()", + "description": "timestamp", + "localizedDescription": { + "value": "timestamp" + }, + "definitionID": "7986d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "timestamp", + "definitionName": { + "value": "Time stamp" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Session Ends.Time stamp", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "7986d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelSessionEnds", + "definitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "timestamp", + "storageFieldReferenceID": { + "type": "guid", + "value": "0c87ce00-c3f1-4c88-b652-ba8dfc3cc10f" + }, + "valueDefinitionID": "7986d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "timestamp", + "name": "Time stamp", + "setDefinitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelSessionEnds", + "setDefinitionName": { + "value": "Predictive Intelligence Session Ends" + }, + "parentIdentifier": "7586d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "7586d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Session Ends", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageLogicalType": "DataExtension", + "storageName": "PI_SESSION_ENDS", + "storageObjectIDs": ["6e86d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "d652de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "7586d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelSessionEnds", + "name": "Predictive Intelligence Session Ends" + }, + { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "ab51de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "2" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "7c86d247-3045-ea11-a2e0-1402ec94ec41", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "8686d247-3045-ea11-a2e0-1402ec94ec41", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "7b86d247-3045-ea11-a2e0-1402ec94ec41", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "a251de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "9386d247-3045-ea11-a2e0-1402ec94ec41", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "7b86d247-3045-ea11-a2e0-1402ec94ec41", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "e651de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "a686d247-3045-ea11-a2e0-1402ec94ec41", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Text", + "customerDataID": 8, + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7b86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "AddressID", + "definitionName": { + "value": "Address ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "GroupConnect LINE Addresses.Address ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "ordinal": 1, + "parentDefinition": { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "AddressId", + "valueDefinitionID": "7b86d247-3045-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "AddressID", + "name": "Address ID", + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "setDefinitionName": { + "value": "GroupConnect LINE Addresses" + }, + "parentIdentifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7c86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "ContactID", + "definitionName": { + "value": "Contact ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "GroupConnect LINE Addresses.Contact ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 2, + "parentDefinition": { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ContactId", + "valueDefinitionID": "7c86d247-3045-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "ContactID", + "name": "Contact ID", + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "setDefinitionName": { + "value": "GroupConnect LINE Addresses" + }, + "parentIdentifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7d86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "ContactKey", + "definitionName": { + "value": "Contact Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "GroupConnect LINE Addresses.Contact Key", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "ordinal": 3, + "parentDefinition": { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ContactKey", + "valueDefinitionID": "7d86d247-3045-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "ContactKey", + "name": "Contact Key", + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "setDefinitionName": { + "value": "GroupConnect LINE Addresses" + }, + "parentIdentifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "defaultValue": "True", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7e86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "IsActive", + "definitionName": { + "value": "Is Active" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "GroupConnect LINE Addresses.Is Active", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 7, + "parentDefinition": { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "IsActive", + "valueDefinitionID": "7e86d247-3045-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "IsActive", + "name": "Is Active", + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "setDefinitionName": { + "value": "GroupConnect LINE Addresses" + }, + "parentIdentifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "7f86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "CreatedDate", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "GroupConnect LINE Addresses.Created Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 8, + "parentDefinition": { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "CreatedDate", + "valueDefinitionID": "7f86d247-3045-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "CreatedDate", + "name": "Created Date", + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "setDefinitionName": { + "value": "GroupConnect LINE Addresses" + }, + "parentIdentifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8086d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "CreatedBy", + "definitionName": { + "value": "Created By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "GroupConnect LINE Addresses.Created By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 9, + "parentDefinition": { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "CreatedBy", + "valueDefinitionID": "8086d247-3045-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "CreatedBy", + "name": "Created By", + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "setDefinitionName": { + "value": "GroupConnect LINE Addresses" + }, + "parentIdentifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8186d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "ModifiedDate", + "definitionName": { + "value": "Modified Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "GroupConnect LINE Addresses.Modified Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 10, + "parentDefinition": { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ModifiedDate", + "valueDefinitionID": "8186d247-3045-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "ModifiedDate", + "name": "Modified Date", + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "setDefinitionName": { + "value": "GroupConnect LINE Addresses" + }, + "parentIdentifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8286d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "ModifiedBy", + "definitionName": { + "value": "Modified By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "GroupConnect LINE Addresses.Modified By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 11, + "parentDefinition": { + "definitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "definitionKey": "GroupConnectLineAddress", + "definitionName": { + "value": "GroupConnect LINE Addresses" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ModifiedBy", + "valueDefinitionID": "8286d247-3045-ea11-a2e0-1402ec94ec41", + "valueDefinitionKey": "ModifiedBy", + "name": "Modified By", + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "setDefinitionName": { + "value": "GroupConnect LINE Addresses" + }, + "parentIdentifier": "7a86d247-3045-ea11-a2e0-1402ec94ec41" + } + ], + "applicationID": "4e9519db-ad21-483a-a3fc-8ab4557eded1", + "applicationKey": "com.exacttarget.GroupConnect", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "createDate": "2020-02-01T14:20:00", + "localizedDescription": {}, + "fullyQualifiedName": "GroupConnect LINE Addresses", + "isCustomObjectBacked": false, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": false, + "isSystemDefined": true, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 3, + "storageObjectIDs": ["9851de3f-31e2-e611-80cc-1402ec7222b4"], + "setDefinitionID": "7a86d247-3045-ea11-a2e0-1402ec94ec41", + "setDefinitionKey": "GroupConnectLineAddress", + "name": "GroupConnect LINE Addresses" + }, + { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "e152de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "4" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "1151de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "9174266c-c416-ec11-b839-48df37d1dc79", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "c80f6472-c416-ec11-b839-48df37d1dc79", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "8574266c-c416-ec11-b839-48df37d1dc79", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "9274266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "_CustomObjectKey" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "fullyQualifiedName": "Einstein MC Predictive Scores._CustomObjectKey", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": false, + "isUpdateable": false, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "9274266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "CustomObjectKey", + "name": "_CustomObjectKey", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Text", + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "9174266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Email Address", + "definitionName": { + "value": "Email Address" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 0, + "fullyQualifiedName": "Einstein MC Predictive Scores.Email Address", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "9174266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 0, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "email_address", + "storageFieldReferenceID": { + "type": "guid", + "value": "29554274-39da-460d-b721-15badcd533e0" + }, + "valueDefinitionID": "9174266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Email Address", + "name": "Email Address", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Text", + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8b74266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Email Open Likelihood", + "definitionName": { + "value": "Email Open Likelihood" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Einstein MC Predictive Scores.Email Open Likelihood", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8b74266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "EmailOpenLikelihood", + "storageFieldReferenceID": { + "type": "guid", + "value": "6a64b510-d27a-4d35-9bb4-23760adaa1f4" + }, + "valueDefinitionID": "8b74266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Email Open Likelihood", + "name": "Email Open Likelihood", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Text", + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8d74266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Email Click Likelihood", + "definitionName": { + "value": "Email Click Likelihood" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Einstein MC Predictive Scores.Email Click Likelihood", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8d74266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "EmailClickLikelihood", + "storageFieldReferenceID": { + "type": "guid", + "value": "6602de48-581e-497a-afae-2f97434db9b4" + }, + "valueDefinitionID": "8d74266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Email Click Likelihood", + "name": "Email Click Likelihood", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Numeric", + "dataSourceName": {}, + "dataType": "Decimal", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8f74266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Email Open Score", + "definitionName": { + "value": "Email Open Score" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Einstein MC Predictive Scores.Email Open Score", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8f74266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 4, + "storageName": "EmailOpenScore", + "storageFieldReferenceID": { + "type": "guid", + "value": "5e315b7d-7135-4ffc-8520-8c9ec91e33fa" + }, + "valueDefinitionID": "8f74266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Email Open Score", + "name": "Email Open Score", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Text", + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8774266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Email Subscribe Likelihood", + "definitionName": { + "value": "Email Subscribe Likelihood" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Einstein MC Predictive Scores.Email Subscribe Likelihood", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8774266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "EmailSubscribeLikelihood", + "storageFieldReferenceID": { + "type": "guid", + "value": "be9bdd26-6875-4c1d-b9cc-64667e9155aa" + }, + "valueDefinitionID": "8774266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Email Subscribe Likelihood", + "name": "Email Subscribe Likelihood", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Numeric", + "dataSourceName": {}, + "dataType": "Decimal", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8e74266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EmailClickScore", + "definitionName": { + "value": "EmailClickScore" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Einstein MC Predictive Scores.EmailClickScore", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8e74266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 4, + "storageName": "EmailClickScore", + "storageFieldReferenceID": { + "type": "guid", + "value": "64515ffd-067d-4abe-9a4e-c72eb303db0b" + }, + "valueDefinitionID": "8e74266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "EmailClickScore", + "name": "EmailClickScore", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Numeric", + "dataSourceName": {}, + "dataType": "Decimal", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8674266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Email Subscribe Score", + "definitionName": { + "value": "Email Subscribe Score" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Einstein MC Predictive Scores.Email Subscribe Score", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8674266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 4, + "storageName": "EmailSubscribeScore", + "storageFieldReferenceID": { + "type": "guid", + "value": "d392d512-6c6e-40dd-8bbf-a50c36321372" + }, + "valueDefinitionID": "8674266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Email Subscribe Score", + "name": "Email Subscribe Score", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Text", + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8c74266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EmailEngagementPersona", + "definitionName": { + "value": "EmailEngagementPersona" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "Einstein MC Predictive Scores.EmailEngagementPersona", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8c74266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "EmailEngagementPersona", + "storageFieldReferenceID": { + "type": "guid", + "value": "67b5a098-1374-4d0a-9ffa-ad9a465eac66" + }, + "valueDefinitionID": "8c74266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "EmailEngagementPersona", + "name": "EmailEngagementPersona", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Text", + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8974266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Conversion Likelihood", + "definitionName": { + "value": "Conversion Likelihood" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "Einstein MC Predictive Scores.Conversion Likelihood", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8974266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 8, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ConversionLikelihood", + "storageFieldReferenceID": { + "type": "guid", + "value": "a293ae7a-dc35-462d-8909-32eccc22fc58" + }, + "valueDefinitionID": "8974266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Conversion Likelihood", + "name": "Conversion Likelihood", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Numeric", + "dataSourceName": {}, + "dataType": "Decimal", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8a74266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Conversion Score", + "definitionName": { + "value": "Conversion Score" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "Einstein MC Predictive Scores.Conversion Score", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8a74266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 9, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 4, + "storageName": "ConversionScore", + "storageFieldReferenceID": { + "type": "guid", + "value": "75a99602-df46-4fcc-a731-1b56c0d24d0e" + }, + "valueDefinitionID": "8a74266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Conversion Score", + "name": "Conversion Score", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Date", + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "getdate()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "9074266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Updated Date", + "definitionName": { + "value": "Updated Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "Einstein MC Predictive Scores.Updated Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "9074266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 4, + "storageName": "UpdatedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "4457d74f-2c14-4a3f-baf2-2cc34cf8858b" + }, + "valueDefinitionID": "9074266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Updated Date", + "name": "Updated Date", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + { + "baseType": "Date", + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "getdate()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8874266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "Created Date", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "Einstein MC Predictive Scores.Created Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8874266c-c416-ec11-b839-48df37d1dc79" + }, + "ordinal": 11, + "parentDefinition": { + "definitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "definitionKey": "EinsteinMCPredictiveScores", + "definitionName": { + "value": "Einstein MC Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 4, + "storageName": "CreatedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "a4852a5f-2952-4648-911a-452533298dab" + }, + "valueDefinitionID": "8874266c-c416-ec11-b839-48df37d1dc79", + "valueDefinitionKey": "Created Date", + "name": "Created Date", + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "setDefinitionName": { + "value": "Einstein MC Predictive Scores" + }, + "parentIdentifier": "8574266c-c416-ec11-b839-48df37d1dc79" + } + ], + "applicationID": "aed181bc-d7b7-465e-a3dd-9cdfb13943e2", + "applicationKey": "com.sfmc-einstein.Einstein Engagement Scoring", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createdBy": -1000, + "createDate": "2021-09-16T02:03:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Einstein MC Predictive Scores", + "isCustomObjectBacked": false, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageLogicalType": "ExactTargetSchema", + "storageName": "Einstein_MC_Predictive_Scores", + "storageObjectIDs": ["c90f6472-c416-ec11-b839-48df37d1dc79"], + "storageReferenceID": { + "type": "guid", + "value": "e5ca7d21-aba6-e811-a2bf-1402ec94ecf1" + }, + "setDefinitionID": "8574266c-c416-ec11-b839-48df37d1dc79", + "setDefinitionKey": "EinsteinMCPredictiveScores", + "name": "Einstein MC Predictive Scores" + }, + { + "definitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Contact", + "definitionName": { + "value": "Contact" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "8f93dc39-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "2" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "9893dc39-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "customerDataID": 2, + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Number", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ContactID", + "definitionName": { + "value": "Contact ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "fullyQualifiedName": "Contact.Contact ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "parentDefinition": { + "definitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Contact", + "definitionName": { + "value": "Contact" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "SubscriberID", + "valueDefinitionID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ContactID", + "name": "Contact ID", + "setDefinitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "Contact", + "setDefinitionName": { + "value": "Contact" + }, + "parentIdentifier": "9093dc39-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "customerDataID": 3, + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "9393dc39-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ContactKey", + "definitionName": { + "value": "Contact Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "fullyQualifiedName": "Contact.Contact Key", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": -1, + "parentDefinition": { + "definitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Contact", + "definitionName": { + "value": "Contact" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "SubscriberKey", + "valueDefinitionID": "9393dc39-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ContactKey", + "name": "Contact Key", + "setDefinitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "Contact", + "setDefinitionName": { + "value": "Contact" + }, + "parentIdentifier": "9093dc39-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "customerDataID": 1, + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Number", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "9193dc39-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "BusinessUnitID", + "definitionName": { + "value": "Business Unit ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "fullyQualifiedName": "Contact.Business Unit ID", + "isHidden": true, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "parentDefinition": { + "definitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Contact", + "definitionName": { + "value": "Contact" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ClientID", + "valueDefinitionID": "9193dc39-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "BusinessUnitID", + "name": "Business Unit ID", + "setDefinitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "Contact", + "setDefinitionName": { + "value": "Contact" + }, + "parentIdentifier": "9093dc39-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "ce703ed3-e01f-4f5f-900d-76a95b363e29", + "applicationKey": "com.exacttarget.contacts", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "localizedDescription": {}, + "fullyQualifiedName": "Contact", + "isCustomObjectBacked": false, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isSystemDefined": true, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageObjectIDs": ["2ba72136-9f31-4a79-ab62-4ba5d19cd759"], + "setDefinitionID": "9093dc39-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "Contact", + "name": "Contact" + }, + { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "a251de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "AddressID", + "definitionName": { + "value": "Address ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "GroupConnect LINE Demographics.Address ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "ordinal": 1, + "parentDefinition": { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "AddressId", + "valueDefinitionID": "a251de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "AddressID", + "name": "Address ID", + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "setDefinitionName": { + "value": "GroupConnect LINE Demographics" + }, + "parentIdentifier": "a151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "da51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "DisplayName", + "definitionName": { + "value": "Display Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "GroupConnect LINE Demographics.Display Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "ordinal": 2, + "parentDefinition": { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "DisplayName", + "valueDefinitionID": "da51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "DisplayName", + "name": "Display Name", + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "setDefinitionName": { + "value": "GroupConnect LINE Demographics" + }, + "parentIdentifier": "a151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "db51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PictureUrl", + "definitionName": { + "value": "Picture Url" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "GroupConnect LINE Demographics.Picture Url", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "ordinal": 3, + "parentDefinition": { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "PictureUrl", + "valueDefinitionID": "db51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "PictureUrl", + "name": "Picture Url", + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "setDefinitionName": { + "value": "GroupConnect LINE Demographics" + }, + "parentIdentifier": "a151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "dc51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "StatusMessage", + "definitionName": { + "value": "Status Message" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "GroupConnect LINE Demographics.Status Message", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "ordinal": 4, + "parentDefinition": { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "StatusMessage", + "valueDefinitionID": "dc51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "StatusMessage", + "name": "Status Message", + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "setDefinitionName": { + "value": "GroupConnect LINE Demographics" + }, + "parentIdentifier": "a151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "a651de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedDate", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "GroupConnect LINE Demographics.Created Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 8, + "parentDefinition": { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "CreatedDate", + "valueDefinitionID": "a651de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedDate", + "name": "Created Date", + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "setDefinitionName": { + "value": "GroupConnect LINE Demographics" + }, + "parentIdentifier": "a151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "a751de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedBy", + "definitionName": { + "value": "Created By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "GroupConnect LINE Demographics.Created By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 9, + "parentDefinition": { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "CreatedBy", + "valueDefinitionID": "a751de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedBy", + "name": "Created By", + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "setDefinitionName": { + "value": "GroupConnect LINE Demographics" + }, + "parentIdentifier": "a151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "a851de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedDate", + "definitionName": { + "value": "Modified Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "GroupConnect LINE Demographics.Modified Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 10, + "parentDefinition": { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ModifiedDate", + "valueDefinitionID": "a851de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedDate", + "name": "Modified Date", + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "setDefinitionName": { + "value": "GroupConnect LINE Demographics" + }, + "parentIdentifier": "a151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "a951de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedBy", + "definitionName": { + "value": "Modified By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "GroupConnect LINE Demographics.Modified By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 11, + "parentDefinition": { + "definitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineDemographics", + "definitionName": { + "value": "GroupConnect LINE Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ModifiedBy", + "valueDefinitionID": "a951de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedBy", + "name": "Modified By", + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "setDefinitionName": { + "value": "GroupConnect LINE Demographics" + }, + "parentIdentifier": "a151de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "4e9519db-ad21-483a-a3fc-8ab4557eded1", + "applicationKey": "com.exacttarget.GroupConnect", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "localizedDescription": {}, + "fullyQualifiedName": "GroupConnect LINE Demographics", + "isCustomObjectBacked": false, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": false, + "isSystemDefined": true, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageObjectIDs": [ + "9851de3f-31e2-e611-80cc-1402ec7222b4", + "d351de3f-31e2-e611-80cc-1402ec7222b4" + ], + "setDefinitionID": "a151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineDemographics", + "name": "GroupConnect LINE Demographics" + }, + { + "definitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelScores", + "definitionName": { + "value": "Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "e152de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "3" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "9393dc39-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "a585d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "a985d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "a185d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "a785d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Scores.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelScores", + "definitionName": { + "value": "Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "a785d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelScores", + "setDefinitionName": { + "value": "Predictive Scores" + }, + "parentIdentifier": "a185d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "subscriber_key", + "localizedDescription": { + "value": "subscriber_key" + }, + "definitionID": "a585d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Subscriber Key", + "definitionName": { + "value": "Subscriber Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Scores.Subscriber Key", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "a585d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelScores", + "definitionName": { + "value": "Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "subscriber_key", + "storageFieldReferenceID": { + "type": "guid", + "value": "f6ce2639-bfff-40c0-835c-9fa89e627592" + }, + "valueDefinitionID": "a585d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Subscriber Key", + "name": "Subscriber Key", + "setDefinitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelScores", + "setDefinitionName": { + "value": "Predictive Scores" + }, + "parentIdentifier": "a185d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "goal_name", + "localizedDescription": { + "value": "goal_name" + }, + "definitionID": "a285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Goal Name", + "definitionName": { + "value": "Goal Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Scores.Goal Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "a285d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelScores", + "definitionName": { + "value": "Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "goal_name", + "storageFieldReferenceID": { + "type": "guid", + "value": "62f73dda-4116-4fdd-ae38-a5cb74fafc6b" + }, + "valueDefinitionID": "a285d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Goal Name", + "name": "Goal Name", + "setDefinitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelScores", + "setDefinitionName": { + "value": "Predictive Scores" + }, + "parentIdentifier": "a185d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "goal_name_key", + "localizedDescription": { + "value": "goal_name_key" + }, + "definitionID": "a385d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Goal Name Key", + "definitionName": { + "value": "Goal Name Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Scores.Goal Name Key", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "a385d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelScores", + "definitionName": { + "value": "Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "goal_name_key", + "storageFieldReferenceID": { + "type": "guid", + "value": "5c34b4cc-5d35-460e-a0b7-ba8e349d725b" + }, + "valueDefinitionID": "a385d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Goal Name Key", + "name": "Goal Name Key", + "setDefinitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelScores", + "setDefinitionName": { + "value": "Predictive Scores" + }, + "parentIdentifier": "a185d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "score", + "localizedDescription": { + "value": "score" + }, + "definitionID": "a485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Score", + "definitionName": { + "value": "Score" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Scores.Score", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "a485d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelScores", + "definitionName": { + "value": "Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 4, + "storageName": "score", + "storageFieldReferenceID": { + "type": "guid", + "value": "8baf5deb-f215-4984-9d91-6e05b88c2f94" + }, + "valueDefinitionID": "a485d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Score", + "name": "Score", + "setDefinitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelScores", + "setDefinitionName": { + "value": "Predictive Scores" + }, + "parentIdentifier": "a185d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Date", + "description": "updated_at", + "localizedDescription": { + "value": "updated_at" + }, + "definitionID": "a685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Updated At", + "definitionName": { + "value": "Updated At" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Scores.Updated At", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "a685d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelScores", + "definitionName": { + "value": "Predictive Scores" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "updated_at", + "storageFieldReferenceID": { + "type": "guid", + "value": "d6fefe2f-e2d5-42bb-bee2-5dd8da16b8e4" + }, + "valueDefinitionID": "a685d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Updated At", + "name": "Updated At", + "setDefinitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelScores", + "setDefinitionName": { + "value": "Predictive Scores" + }, + "parentIdentifier": "a185d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "a185d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Scores", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageLogicalType": "DataExtension", + "storageName": "PREDICTIVE_SCORES", + "storageObjectIDs": ["9a85d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "de52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "a185d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelScores", + "name": "Predictive Scores" + }, + { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "b451de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "2" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "b351de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "b751de3f-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b351de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ContactsID", + "definitionName": { + "value": "Contacts ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 0, + "fullyQualifiedName": "Email Demographics.Contacts ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": true, + "ordinal": 0, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_SubscriberID", + "valueDefinitionID": "b351de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ContactsID", + "name": "Contacts ID", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b4e96cfc-85f7-e611-80cc-1402ec7222b4", + "definitionKey": "First Name", + "definitionName": { + "value": "First Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Email Demographics.First Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b4e96cfc-85f7-e611-80cc-1402ec7222b4" + }, + "ordinal": 1, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "First Name", + "storageFieldReferenceID": { + "type": "guid", + "value": "eef81ae9-14e8-47b3-bede-5a691614c7c3" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10025" + }, + "valueDefinitionID": "b4e96cfc-85f7-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "First Name", + "name": "First Name", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b6e96cfc-85f7-e611-80cc-1402ec7222b4", + "definitionKey": "Last Name", + "definitionName": { + "value": "Last Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Email Demographics.Last Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b6e96cfc-85f7-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Last Name", + "storageFieldReferenceID": { + "type": "guid", + "value": "4434d534-4fb8-4ec4-9ffc-fe386781f8ef" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10026" + }, + "valueDefinitionID": "b6e96cfc-85f7-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Last Name", + "name": "Last Name", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b2e96cfc-85f7-e611-80cc-1402ec7222b4", + "definitionKey": "Language", + "definitionName": { + "value": "Language" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Email Demographics.Language", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b2e96cfc-85f7-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Language", + "storageFieldReferenceID": { + "type": "guid", + "value": "4b06d940-5f23-461f-859d-9c2aeee53525" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10027" + }, + "valueDefinitionID": "b2e96cfc-85f7-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Language", + "name": "Language", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "720e6c78-9709-e711-80cc-1402ec7222b4", + "definitionKey": "Transaction Points1", + "definitionName": { + "value": "Transaction Points" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Email Demographics.Transaction Points", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "720e6c78-9709-e711-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Transaction Points", + "storageFieldReferenceID": { + "type": "guid", + "value": "fdcb28a8-59fd-489a-bdce-b286bccc147e" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10033" + }, + "valueDefinitionID": "720e6c78-9709-e711-80cc-1402ec7222b4", + "valueDefinitionKey": "Transaction Points1", + "name": "Transaction Points", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "f05cc16f-8a14-e711-80cc-1402ec7222b4", + "definitionKey": "Market", + "definitionName": { + "value": "Market" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "Email Demographics.Market", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f05cc16f-8a14-e711-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Market", + "storageFieldReferenceID": { + "type": "guid", + "value": "d6f80d57-488f-401b-822b-1b556d631d1c" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10034" + }, + "valueDefinitionID": "f05cc16f-8a14-e711-80cc-1402ec7222b4", + "valueDefinitionKey": "Market", + "name": "Market", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "32c8b204-85ff-e711-80d0-1402ec7222b5", + "definitionKey": "SFOrg", + "definitionName": { + "value": "SFOrg" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "Email Demographics.SFOrg", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "32c8b204-85ff-e711-80d0-1402ec7222b5" + }, + "ordinal": 8, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "SFOrg", + "storageFieldReferenceID": { + "type": "guid", + "value": "5d1032d3-5c92-4de4-bfb8-0e377f4483e2" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10081" + }, + "valueDefinitionID": "32c8b204-85ff-e711-80d0-1402ec7222b5", + "valueDefinitionKey": "SFOrg", + "name": "SFOrg", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "8775d770-e194-e911-a2cf-1402ec94ecf1", + "definitionKey": "Username", + "definitionName": { + "value": "Username" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "Email Demographics.Username", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 255, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "8775d770-e194-e911-a2cf-1402ec94ecf1" + }, + "ordinal": 9, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Username", + "storageFieldReferenceID": { + "type": "guid", + "value": "55ac244c-2afd-4134-8495-9c1c188debdc" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10299" + }, + "valueDefinitionID": "8775d770-e194-e911-a2cf-1402ec94ecf1", + "valueDefinitionKey": "Username", + "name": "Username", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "570dea88-6e94-ea11-a2e5-1402ec9386e5", + "definitionKey": "Account Id", + "definitionName": { + "value": "Account Id" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "Email Demographics.Account Id", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "570dea88-6e94-ea11-a2e5-1402ec9386e5" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Account Id", + "storageFieldReferenceID": { + "type": "guid", + "value": "eb2f7e92-f7f8-435c-835a-3c24d5e003d5" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10334" + }, + "valueDefinitionID": "570dea88-6e94-ea11-a2e5-1402ec9386e5", + "valueDefinitionKey": "Account Id", + "name": "Account Id", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "74c1c047-9e94-ea11-a2e5-1402ec9386e5", + "definitionKey": "AccountId", + "definitionName": { + "value": "AccountId" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "Email Demographics.AccountId", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "74c1c047-9e94-ea11-a2e5-1402ec9386e5" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Account Id", + "storageFieldReferenceID": { + "type": "guid", + "value": "eb2f7e92-f7f8-435c-835a-3c24d5e003d5" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10334" + }, + "valueDefinitionID": "74c1c047-9e94-ea11-a2e5-1402ec9386e5", + "valueDefinitionKey": "AccountId", + "name": "AccountId", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "560dea88-6e94-ea11-a2e5-1402ec9386e5", + "definitionKey": "Preferred language", + "definitionName": { + "value": "Preferred language" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 12, + "fullyQualifiedName": "Email Demographics.Preferred language", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "560dea88-6e94-ea11-a2e5-1402ec9386e5" + }, + "ordinal": 12, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Preferred language", + "storageFieldReferenceID": { + "type": "guid", + "value": "be1fac02-93ef-4c9e-b06d-22757e1aeda8" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10336" + }, + "valueDefinitionID": "560dea88-6e94-ea11-a2e5-1402ec9386e5", + "valueDefinitionKey": "Preferred language", + "name": "Preferred language", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "550dea88-6e94-ea11-a2e5-1402ec9386e5", + "definitionKey": "Flex Parameter 1", + "definitionName": { + "value": "Flex Parameter 1" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 13, + "fullyQualifiedName": "Email Demographics.Flex Parameter 1", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "550dea88-6e94-ea11-a2e5-1402ec9386e5" + }, + "ordinal": 13, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Flex Parameter 1", + "storageFieldReferenceID": { + "type": "guid", + "value": "96436704-494e-4bb1-914a-3ad6994bbf2d" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10337" + }, + "valueDefinitionID": "550dea88-6e94-ea11-a2e5-1402ec9386e5", + "valueDefinitionKey": "Flex Parameter 1", + "name": "Flex Parameter 1", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "866d4451-7d94-ea11-a2e5-1402ec9386e5", + "definitionKey": "Flex Parameter 2", + "definitionName": { + "value": "Flex Parameter 2" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 14, + "fullyQualifiedName": "Email Demographics.Flex Parameter 2", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "866d4451-7d94-ea11-a2e5-1402ec9386e5" + }, + "ordinal": 14, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Flex Parameter 2", + "storageFieldReferenceID": { + "type": "guid", + "value": "02a5b26c-05f6-426b-8735-de6033503f8f" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10338" + }, + "valueDefinitionID": "866d4451-7d94-ea11-a2e5-1402ec9386e5", + "valueDefinitionKey": "Flex Parameter 2", + "name": "Flex Parameter 2", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "876d4451-7d94-ea11-a2e5-1402ec9386e5", + "definitionKey": "Flex Parameter 3", + "definitionName": { + "value": "Flex Parameter 3" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 15, + "fullyQualifiedName": "Email Demographics.Flex Parameter 3", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "876d4451-7d94-ea11-a2e5-1402ec9386e5" + }, + "ordinal": 15, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Flex Parameter 3", + "storageFieldReferenceID": { + "type": "guid", + "value": "058f7489-c272-466c-88ce-b528b5b17955" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10339" + }, + "valueDefinitionID": "876d4451-7d94-ea11-a2e5-1402ec9386e5", + "valueDefinitionKey": "Flex Parameter 3", + "name": "Flex Parameter 3", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "886d4451-7d94-ea11-a2e5-1402ec9386e5", + "definitionKey": "Flex Parameter 4", + "definitionName": { + "value": "Flex Parameter 4" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 16, + "fullyQualifiedName": "Email Demographics.Flex Parameter 4", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "886d4451-7d94-ea11-a2e5-1402ec9386e5" + }, + "ordinal": 16, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Flex Parameter 4", + "storageFieldReferenceID": { + "type": "guid", + "value": "2702b318-539d-4fe3-9c52-c7ba3e32a949" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10340" + }, + "valueDefinitionID": "886d4451-7d94-ea11-a2e5-1402ec9386e5", + "valueDefinitionKey": "Flex Parameter 4", + "name": "Flex Parameter 4", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 2, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "1a4f88cd-a194-ea11-a2e5-1402ec9386e5", + "definitionKey": "Contact Role", + "definitionName": { + "value": "Contact Role" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 17, + "fullyQualifiedName": "Email Demographics.Contact Role", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "1a4f88cd-a194-ea11-a2e5-1402ec9386e5" + }, + "ordinal": 17, + "parentDefinition": { + "definitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "EmailDemographics", + "definitionName": { + "value": "Email Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Contact Role", + "storageFieldReferenceID": { + "type": "guid", + "value": "f3412d1f-bf50-4e3a-8db8-7e1bc15e019b" + }, + "storageFieldValueID": { + "type": "int32", + "value": "10341" + }, + "valueDefinitionID": "1a4f88cd-a194-ea11-a2e5-1402ec9386e5", + "valueDefinitionKey": "Contact Role", + "name": "Contact Role", + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "setDefinitionName": { + "value": "Email Demographics" + }, + "parentIdentifier": "b151de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "b2ca1f50-3cc4-4fd7-a3a3-88bf09fb59fa", + "applicationKey": "com.exacttarget.email", + "attributeCount": 0, + "canAddValues": true, + "canChangeValues": true, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 0, + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Email Demographics", + "isCustomObjectBacked": false, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageLogicalType": "EnterpriseAttributes", + "storageName": "_EnterpriseAttribute", + "storageObjectIDs": ["b051de3f-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "1ba7e67d-2647-4537-beb3-b0c5bac65d3c" + }, + "setDefinitionID": "b151de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "EmailDemographics", + "name": "Email Demographics" + }, + { + "definitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductViews", + "definitionName": { + "value": "Predictive Intelligence Product Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "b285d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "b485d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "7886d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "7d86d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "7586d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "b285d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "b585d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "c885d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "cd85d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "c485d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b885d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Product Views.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductViews", + "definitionName": { + "value": "Predictive Intelligence Product Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "b885d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductViews", + "setDefinitionName": { + "value": "Predictive Intelligence Product Views" + }, + "parentIdentifier": "b285d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "sku", + "localizedDescription": { + "value": "sku" + }, + "definitionID": "b585d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SKU", + "definitionName": { + "value": "SKU" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Product Views.SKU", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b585d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductViews", + "definitionName": { + "value": "Predictive Intelligence Product Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "sku", + "storageFieldReferenceID": { + "type": "guid", + "value": "f8553b64-8076-449d-aea0-450aed1a793c" + }, + "valueDefinitionID": "b585d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SKU", + "name": "SKU", + "setDefinitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductViews", + "setDefinitionName": { + "value": "Predictive Intelligence Product Views" + }, + "parentIdentifier": "b285d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "user_id", + "localizedDescription": { + "value": "user_id" + }, + "definitionID": "b785d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "User_ID", + "definitionName": { + "value": "User ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Product Views.User ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b785d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductViews", + "definitionName": { + "value": "Predictive Intelligence Product Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "user_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "f8e9c116-3218-4064-92e4-dcccaf730a4f" + }, + "valueDefinitionID": "b785d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "User_ID", + "name": "User ID", + "setDefinitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductViews", + "setDefinitionName": { + "value": "Predictive Intelligence Product Views" + }, + "parentIdentifier": "b285d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "session_id", + "localizedDescription": { + "value": "session_id" + }, + "definitionID": "b485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Session_ID", + "definitionName": { + "value": "Session ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Product Views.Session ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b485d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductViews", + "definitionName": { + "value": "Predictive Intelligence Product Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "session_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "bbca44f6-6353-464d-aba1-4285ae5072b6" + }, + "valueDefinitionID": "b485d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Session_ID", + "name": "Session ID", + "setDefinitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductViews", + "setDefinitionName": { + "value": "Predictive Intelligence Product Views" + }, + "parentIdentifier": "b285d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Search", + "localizedDescription": { + "value": "Search" + }, + "definitionID": "b385d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Search", + "definitionName": { + "value": "Search" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Product Views.Search", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 1000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b385d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductViews", + "definitionName": { + "value": "Predictive Intelligence Product Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Search", + "storageFieldReferenceID": { + "type": "guid", + "value": "68949690-06d5-452d-b4c7-b8daab2f3681" + }, + "valueDefinitionID": "b385d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Search", + "name": "Search", + "setDefinitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductViews", + "setDefinitionName": { + "value": "Predictive Intelligence Product Views" + }, + "parentIdentifier": "b285d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Date", + "description": "Timestamp", + "localizedDescription": { + "value": "Timestamp" + }, + "definitionID": "b685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Timestamp", + "definitionName": { + "value": "Timestamp" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Product Views.Timestamp", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b685d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductViews", + "definitionName": { + "value": "Predictive Intelligence Product Views" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Timestamp", + "storageFieldReferenceID": { + "type": "guid", + "value": "4fb7775d-277f-4f87-ba60-da24b120ba49" + }, + "valueDefinitionID": "b685d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Timestamp", + "name": "Timestamp", + "setDefinitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductViews", + "setDefinitionName": { + "value": "Predictive Intelligence Product Views" + }, + "parentIdentifier": "b285d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "b285d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Product Views", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 2, + "storageLogicalType": "DataExtension", + "storageName": "IGO_VIEWS", + "storageObjectIDs": ["ab85d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "d552de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "b285d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductViews", + "name": "Predictive Intelligence Product Views" + }, + { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushAppID", + "definitionName": { + "value": "Application" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "MobilePush Subscriptions.Application", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 38, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b452de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 11, + "storageName": "_APID", + "storageFieldReferenceID": { + "type": "guid", + "value": "4e82734e-ff8a-4868-a786-20e9596a94d2" + }, + "valueDefinitionID": "b452de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "PushAppID", + "name": "Application", + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "setDefinitionName": { + "value": "MobilePush Subscriptions" + }, + "parentIdentifier": "b352de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "bb52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "MobilePush Subscriptions.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 9, + "parentDefinition": { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "bb52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "setDefinitionName": { + "value": "MobilePush Subscriptions" + }, + "parentIdentifier": "b352de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b552de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDeviceID", + "definitionName": { + "value": "Device ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "MobilePush Subscriptions.Device ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b552de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 11, + "parentDefinition": { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_DeviceID", + "storageFieldReferenceID": { + "type": "guid", + "value": "9d8db1d4-c00e-49bc-98d9-e30d2e3ed7cf" + }, + "valueDefinitionID": "b552de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "PushDeviceID", + "name": "Device ID", + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "setDefinitionName": { + "value": "MobilePush Subscriptions" + }, + "parentIdentifier": "b352de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInDate", + "definitionName": { + "value": "Opt In Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 20, + "fullyQualifiedName": "MobilePush Subscriptions.Opt In Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b652de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 20, + "parentDefinition": { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptInDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "68c6681d-6f0f-4ec2-9407-55c5eb19fc19" + }, + "valueDefinitionID": "b652de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInDate", + "name": "Opt In Date", + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "setDefinitionName": { + "value": "MobilePush Subscriptions" + }, + "parentIdentifier": "b352de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b752de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInMethodID", + "definitionName": { + "value": "Opt In Method" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 21, + "fullyQualifiedName": "MobilePush Subscriptions.Opt In Method", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b752de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 21, + "parentDefinition": { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 9, + "storageName": "_OptInMethodID", + "storageFieldReferenceID": { + "type": "guid", + "value": "8b821a18-6cee-4204-9ef9-18d94112e84f" + }, + "valueDefinitionID": "b752de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInMethodID", + "name": "Opt In Method", + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "setDefinitionName": { + "value": "MobilePush Subscriptions" + }, + "parentIdentifier": "b352de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b852de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptInStatusID", + "definitionName": { + "value": "Opt In Status" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 22, + "fullyQualifiedName": "MobilePush Subscriptions.Opt In Status", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b852de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 22, + "parentDefinition": { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 8, + "storageName": "_OptInStatusID", + "storageFieldReferenceID": { + "type": "guid", + "value": "673470b8-8503-4c4c-b9ae-9bf554d0a235" + }, + "valueDefinitionID": "b852de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptInStatusID", + "name": "Opt In Status", + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "setDefinitionName": { + "value": "MobilePush Subscriptions" + }, + "parentIdentifier": "b352de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "b952de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptOutDate", + "definitionName": { + "value": "Opt Out Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 23, + "fullyQualifiedName": "MobilePush Subscriptions.Opt Out Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "b952de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 23, + "parentDefinition": { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptOutDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "8424262e-6904-4915-a4b3-2957b044b3ee" + }, + "valueDefinitionID": "b952de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptOutDate", + "name": "Opt Out Date", + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "setDefinitionName": { + "value": "MobilePush Subscriptions" + }, + "parentIdentifier": "b352de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "ba52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "OptOutMethodID", + "definitionName": { + "value": "Opt Out Method" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 24, + "fullyQualifiedName": "MobilePush Subscriptions.Opt Out Method", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "ba52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 24, + "parentDefinition": { + "definitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushSubscriptions", + "definitionName": { + "value": "MobilePush Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 10, + "storageName": "_OptOutMethodID", + "storageFieldReferenceID": { + "type": "guid", + "value": "3919bba5-e953-435d-8874-66be31cb1821" + }, + "valueDefinitionID": "ba52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "OptOutMethodID", + "name": "Opt Out Method", + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "setDefinitionName": { + "value": "MobilePush Subscriptions" + }, + "parentIdentifier": "b352de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "2051892d-5de2-4ecf-98af-8ca9a40d2c9c", + "applicationKey": "com.exacttarget.mobilepush", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "MobilePush Subscriptions", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "sendAttributeStorageName": "_ContactID", + "sendContactKeyStorageName": "_SubscriberID", + "storageLogicalType": "PushAttributes", + "storageName": "_PushAddress", + "storageObjectIDs": ["4851de3f-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "7893dc39-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "b352de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushSubscriptions", + "name": "MobilePush Subscriptions" + }, + { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProducts", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "c485d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "c885d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "da85d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "de85d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "d685d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cb85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Products.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProducts", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "cb85d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProducts", + "setDefinitionName": { + "value": "Predictive Intelligence Products" + }, + "parentIdentifier": "c485d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "name", + "localizedDescription": { + "value": "name" + }, + "definitionID": "c585d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Name", + "definitionName": { + "value": "Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Products.Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 1000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "c585d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProducts", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "name", + "storageFieldReferenceID": { + "type": "guid", + "value": "116f93a1-da7c-4b0a-876c-7f6f107881c5" + }, + "valueDefinitionID": "c585d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Name", + "name": "Name", + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProducts", + "setDefinitionName": { + "value": "Predictive Intelligence Products" + }, + "parentIdentifier": "c485d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "regPrice", + "localizedDescription": { + "value": "regPrice" + }, + "definitionID": "c685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Regular_Price", + "definitionName": { + "value": "Regular Price" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Products.Regular Price", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "c685d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProducts", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 2, + "storageName": "regPrice", + "storageFieldReferenceID": { + "type": "guid", + "value": "d651f3d5-5b32-4fd7-907d-2d6caf42f827" + }, + "valueDefinitionID": "c685d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Regular_Price", + "name": "Regular Price", + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProducts", + "setDefinitionName": { + "value": "Predictive Intelligence Products" + }, + "parentIdentifier": "c485d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "salePrice", + "localizedDescription": { + "value": "salePrice" + }, + "definitionID": "c785d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Sale_Price", + "definitionName": { + "value": "Sale Price" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Products.Sale Price", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "c785d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProducts", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 2, + "storageName": "salePrice", + "storageFieldReferenceID": { + "type": "guid", + "value": "b10ebf49-6195-40c2-beaa-810d2c5b39d4" + }, + "valueDefinitionID": "c785d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Sale_Price", + "name": "Sale Price", + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProducts", + "setDefinitionName": { + "value": "Predictive Intelligence Products" + }, + "parentIdentifier": "c485d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Uuid", + "localizedDescription": { + "value": "Uuid" + }, + "definitionID": "ca85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "UUID", + "definitionName": { + "value": "UUID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Products.UUID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "ca85d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProducts", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Uuid", + "storageFieldReferenceID": { + "type": "guid", + "value": "7fc0495c-f03d-496a-a74d-770a9e672518" + }, + "valueDefinitionID": "ca85d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "UUID", + "name": "UUID", + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProducts", + "setDefinitionName": { + "value": "Predictive Intelligence Products" + }, + "parentIdentifier": "c485d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "sku", + "localizedDescription": { + "value": "sku" + }, + "definitionID": "c885d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SKU", + "definitionName": { + "value": "SKU" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Products.SKU", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "c885d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProducts", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "sku", + "storageFieldReferenceID": { + "type": "guid", + "value": "603870ea-b2e0-4613-bb22-08f582f34a94" + }, + "valueDefinitionID": "c885d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SKU", + "name": "SKU", + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProducts", + "setDefinitionName": { + "value": "Predictive Intelligence Products" + }, + "parentIdentifier": "c485d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "type", + "localizedDescription": { + "value": "type" + }, + "definitionID": "c985d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Type", + "definitionName": { + "value": "Type" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "Predictive Intelligence Products.Type", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "c985d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProducts", + "definitionName": { + "value": "Predictive Intelligence Products" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "type", + "storageFieldReferenceID": { + "type": "guid", + "value": "9f3e8ffe-c631-4397-ab2e-8cbc50d7f6c1" + }, + "valueDefinitionID": "c985d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Type", + "name": "Type", + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProducts", + "setDefinitionName": { + "value": "Predictive Intelligence Products" + }, + "parentIdentifier": "c485d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Products", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 1, + "storageLogicalType": "DataExtension", + "storageName": "IGO_PRODUCTS", + "storageObjectIDs": ["bc85d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "d852de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "c485d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProducts", + "name": "Predictive Intelligence Products" + }, + { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "c752de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushAppID", + "definitionName": { + "value": "Application" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "MobilePush Tags.Application", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 38, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "c752de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 1, + "parentDefinition": { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 11, + "storageName": "_APID", + "storageFieldReferenceID": { + "type": "guid", + "value": "7f711754-1b97-4c7d-86d8-507f9fcb877d" + }, + "valueDefinitionID": "c752de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "PushAppID", + "name": "Application", + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "setDefinitionName": { + "value": "MobilePush Tags" + }, + "parentIdentifier": "c652de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "ce52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "MobilePush Tags.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 2, + "parentDefinition": { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "ce52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "setDefinitionName": { + "value": "MobilePush Tags" + }, + "parentIdentifier": "c652de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "c852de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedBy", + "definitionName": { + "value": "Created By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "MobilePush Tags.Created By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "c852de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "dbc7917c-95cd-4294-b116-eb215d1c5c0b" + }, + "valueDefinitionID": "c852de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedBy", + "name": "Created By", + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "setDefinitionName": { + "value": "MobilePush Tags" + }, + "parentIdentifier": "c652de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "c952de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedDate", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "MobilePush Tags.Created Date", + "isHidden": true, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "c952de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "30e22e41-0415-4d8a-b817-c56b0bffa168" + }, + "valueDefinitionID": "c952de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedDate", + "name": "Created Date", + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "setDefinitionName": { + "value": "MobilePush Tags" + }, + "parentIdentifier": "c652de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "ca52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushDeviceID", + "definitionName": { + "value": "Device ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "MobilePush Tags.Device ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "ca52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_DeviceID", + "storageFieldReferenceID": { + "type": "guid", + "value": "ee23b0fd-76ad-46b5-9e14-aef0e17ec28f" + }, + "valueDefinitionID": "ca52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "PushDeviceID", + "name": "Device ID", + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "setDefinitionName": { + "value": "MobilePush Tags" + }, + "parentIdentifier": "c652de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cb52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedBy", + "definitionName": { + "value": "Modified By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "MobilePush Tags.Modified By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "cb52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "36b8827e-6017-4cba-bd0f-ba2261480736" + }, + "valueDefinitionID": "cb52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedBy", + "name": "Modified By", + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "setDefinitionName": { + "value": "MobilePush Tags" + }, + "parentIdentifier": "c652de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cc52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedDate", + "definitionName": { + "value": "Modified Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "MobilePush Tags.Modified Date", + "isHidden": true, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "cc52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "685ea0db-0ecb-4111-8676-0a7c0a29c79f" + }, + "valueDefinitionID": "cc52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedDate", + "name": "Modified Date", + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "setDefinitionName": { + "value": "MobilePush Tags" + }, + "parentIdentifier": "c652de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cd52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Value", + "definitionName": { + "value": "Value" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "MobilePush Tags.Value", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 128, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "cd52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 8, + "parentDefinition": { + "definitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PushTags", + "definitionName": { + "value": "MobilePush Tags" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Value", + "storageFieldReferenceID": { + "type": "guid", + "value": "cd7e2a3c-2551-4518-96c7-5c6b0d42423e" + }, + "valueDefinitionID": "cd52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Value", + "name": "Value", + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "setDefinitionName": { + "value": "MobilePush Tags" + }, + "parentIdentifier": "c652de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "2051892d-5de2-4ecf-98af-8ca9a40d2c9c", + "applicationKey": "com.exacttarget.mobilepush", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "MobilePush Tags", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageLogicalType": "DataExtension", + "storageName": "_PushTag", + "storageObjectIDs": ["bd52de3f-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "7993dc39-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "c652de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PushTags", + "name": "MobilePush Tags" + }, + { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "cae9847d-696d-eb11-b81e-48df37d1df5a", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "2" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "9293dc39-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "cee9847d-696d-eb11-b81e-48df37d1df5a", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "9a42dcad-ae72-4cde-9937-193e17485ad6", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "d5e9847d-696d-eb11-b81e-48df37d1df5a", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "f7e9847d-696d-eb11-b81e-48df37d1df5a", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "04ea847d-696d-eb11-b81e-48df37d1df5a", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cbe9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "CarrierID", + "definitionName": { + "value": "Carrier ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Chat Message Demographics.Carrier ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "cbe9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 1, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CarrierID", + "storageFieldReferenceID": { + "type": "guid", + "value": "3fdc8842-cc0f-407c-a3ec-930d7a027d1d" + }, + "valueDefinitionID": "cbe9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "CarrierID", + "name": "Carrier ID", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cce9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "Channel", + "definitionName": { + "value": "Channel" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Chat Message Demographics.Channel", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 20, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "cce9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Channel", + "storageFieldReferenceID": { + "type": "guid", + "value": "ef36ded9-67b2-4daf-899f-6862af8e5ee7" + }, + "valueDefinitionID": "cce9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "Channel", + "name": "Channel", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cde9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "City", + "definitionName": { + "value": "City" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Chat Message Demographics.City", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "cde9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_City", + "storageFieldReferenceID": { + "type": "guid", + "value": "be7b4554-bf03-4a80-9101-3e396b2e345f" + }, + "valueDefinitionID": "cde9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "City", + "name": "City", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cee9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ContactID", + "definitionName": { + "value": "Contact ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Chat Message Demographics.Contact ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "cee9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ContactID", + "storageFieldReferenceID": { + "type": "guid", + "value": "b0e31883-cae8-4bc5-aa24-88565d375a18" + }, + "valueDefinitionID": "cee9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "ContactID", + "name": "Contact ID", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d0e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "CreatedBy", + "definitionName": { + "value": "Created By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Chat Message Demographics.Created By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d0e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "1671a32a-8eb0-4dc5-b30d-8ad16e55a601" + }, + "valueDefinitionID": "d0e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "CreatedBy", + "name": "Created By", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d1e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "CreatedDate", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Chat Message Demographics.Created Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d1e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "de543ca5-5920-4309-adb9-33472144defe" + }, + "valueDefinitionID": "d1e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "CreatedDate", + "name": "Created Date", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "FirstName", + "definitionName": { + "value": "First Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "Chat Message Demographics.First Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 9, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_FirstName", + "storageFieldReferenceID": { + "type": "guid", + "value": "125f7c91-2f11-44bd-9687-f22cf2461496" + }, + "valueDefinitionID": "d2e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "FirstName", + "name": "First Name", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "defaultValue": "False", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d3e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "IsHonorDST", + "definitionName": { + "value": "Is Honor DST" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "Chat Message Demographics.Is Honor DST", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d3e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_IsHonorDST", + "storageFieldReferenceID": { + "type": "guid", + "value": "17abe00a-4306-43c5-b27f-a81f015d6dfb" + }, + "valueDefinitionID": "d3e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "IsHonorDST", + "name": "Is Honor DST", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d4e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "LastName", + "definitionName": { + "value": "Last Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "Chat Message Demographics.Last Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 100, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d4e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 11, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_LastName", + "storageFieldReferenceID": { + "type": "guid", + "value": "e31f18f4-5422-410b-adcc-1b60f61cce5f" + }, + "valueDefinitionID": "d4e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "LastName", + "name": "Last Name", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "cfe9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "CountryCode", + "definitionName": { + "value": "Locale" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 12, + "fullyQualifiedName": "Chat Message Demographics.Locale", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 2, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "cfe9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 12, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CountryCode", + "storageFieldReferenceID": { + "type": "guid", + "value": "4b5fda70-47cb-4f4b-8ba6-f5cac53ee344" + }, + "valueDefinitionID": "cfe9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "CountryCode", + "name": "Locale", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Phone", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d5e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "MobileNumber", + "definitionName": { + "value": "Mobile Number" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 14, + "fullyQualifiedName": "Chat Message Demographics.Mobile Number", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 15, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d5e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 14, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_MobileNumber", + "storageFieldReferenceID": { + "type": "guid", + "value": "e31a7e3b-e943-440e-9be6-77224a4928fe" + }, + "valueDefinitionID": "d5e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "MobileNumber", + "name": "Mobile Number", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d6e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ModifiedBy", + "definitionName": { + "value": "Modified By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 15, + "fullyQualifiedName": "Chat Message Demographics.Modified By", + "isHidden": true, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d6e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 15, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedBy", + "storageFieldReferenceID": { + "type": "guid", + "value": "a9be58ef-884d-44f4-9926-d73ebe587847" + }, + "valueDefinitionID": "d6e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "ModifiedBy", + "name": "Modified By", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d7e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ModifiedDate", + "definitionName": { + "value": "Modified Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 16, + "fullyQualifiedName": "Chat Message Demographics.Modified Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d7e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 16, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "216659c1-9512-47de-a9ee-822f48148514" + }, + "valueDefinitionID": "d7e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "ModifiedDate", + "name": "Modified Date", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d8e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "Priority", + "definitionName": { + "value": "Priority" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 17, + "fullyQualifiedName": "Chat Message Demographics.Priority", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d8e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 17, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Priority", + "storageFieldReferenceID": { + "type": "guid", + "value": "71153ee5-a33f-4cf6-a963-0c3a893d9348" + }, + "valueDefinitionID": "d8e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "Priority", + "name": "Priority", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "d9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "Source", + "definitionName": { + "value": "Source" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 18, + "fullyQualifiedName": "Chat Message Demographics.Source", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 18, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 5, + "storageName": "_Source", + "storageFieldReferenceID": { + "type": "guid", + "value": "f6bafdfb-86bf-45e8-9b76-b878c904d6c5" + }, + "valueDefinitionID": "d9e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "Source", + "name": "Source", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "dae9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "SourceObjectID", + "definitionName": { + "value": "Source Object ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 19, + "fullyQualifiedName": "Chat Message Demographics.Source Object ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "dae9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 19, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_SourceObjectId", + "storageFieldReferenceID": { + "type": "guid", + "value": "c67a7922-44e5-4c4b-a4c8-2ac3550a5f07" + }, + "valueDefinitionID": "dae9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "SourceObjectID", + "name": "Source Object ID", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 4, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "dfe9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "SFContactID", + "definitionName": { + "value": "SFContactID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 19, + "fullyQualifiedName": "Chat Message Demographics.SFContactID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": true, + "length": 50, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "dfe9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 19, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "SFContactID", + "storageFieldReferenceID": { + "type": "guid", + "value": "ce5a90ea-88eb-4683-9a1a-5c776b5763ce" + }, + "valueDefinitionID": "dfe9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "SFContactID", + "name": "SFContactID", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "dbe9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "State", + "definitionName": { + "value": "State" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 20, + "fullyQualifiedName": "Chat Message Demographics.State", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 200, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "dbe9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 20, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_State", + "storageFieldReferenceID": { + "type": "guid", + "value": "c0ea1fac-d939-4dde-b45a-16586f661924" + }, + "valueDefinitionID": "dbe9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "State", + "name": "State", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "dce9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "Status", + "definitionName": { + "value": "Status" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 21, + "fullyQualifiedName": "Chat Message Demographics.Status", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "dce9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 21, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 6, + "storageName": "_Status", + "storageFieldReferenceID": { + "type": "guid", + "value": "fafff407-c055-411c-81ec-78907f5dbd58" + }, + "valueDefinitionID": "dce9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "Status", + "name": "Status", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "dde9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "UTCOffset", + "definitionName": { + "value": "UTC Offset" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 22, + "fullyQualifiedName": "Chat Message Demographics.UTC Offset", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": 4, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "dde9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 22, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 2, + "storageName": "_UTCOffset", + "storageFieldReferenceID": { + "type": "guid", + "value": "84d29656-a348-43c2-ac2f-8c7ec5b18a3e" + }, + "valueDefinitionID": "dde9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "UTCOffset", + "name": "UTC Offset", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "e0e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ZipCode", + "definitionName": { + "value": "Zip Code" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 23, + "fullyQualifiedName": "Chat Message Demographics.Zip Code", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": false, + "isUpdateable": false, + "length": 20, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "e0e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "ordinal": 23, + "parentDefinition": { + "definitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageDemographics", + "definitionName": { + "value": "Chat Message Demographics" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ZipCode", + "storageFieldReferenceID": { + "type": "guid", + "value": "11ce9d05-a1e3-47ba-9077-11097e0b4c8d" + }, + "valueDefinitionID": "e0e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "ZipCode", + "name": "Zip Code", + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "setDefinitionName": { + "value": "Chat Message Demographics" + }, + "parentIdentifier": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + } + ], + "applicationID": "e25893f9-08f3-480f-8def-7f8ab0583611", + "applicationKey": "com.exacttarget.mobileconnect", + "attributeCount": 0, + "canAddValues": true, + "canChangeValues": true, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createDate": "2021-02-12T13:36:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Chat Message Demographics", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": true, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 2, + "sendAttributeStorageName": "_ContactID", + "sendContactKeyStorageName": "_SubscriberID", + "storageLogicalType": "MobileAttributes", + "storageName": "_MobileAddress", + "storageObjectIDs": ["1651de3f-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "7693dc39-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "c9e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageDemographics", + "name": "Chat Message Demographics" + }, + { + "definitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductAttribs", + "definitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "dc85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Product Attributes.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductAttribs", + "definitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "dc85d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "parentIdentifier": "d685d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "attribName", + "localizedDescription": { + "value": "attribName" + }, + "definitionID": "d785d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_Name", + "definitionName": { + "value": "Attribute Name" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Product Attributes.Attribute Name", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 1000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d785d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductAttribs", + "definitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "attribName", + "storageFieldReferenceID": { + "type": "guid", + "value": "a29facf4-9173-43b7-98d5-57bef44c832f" + }, + "valueDefinitionID": "d785d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_Name", + "name": "Attribute Name", + "setDefinitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "parentIdentifier": "d685d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "attribValue", + "localizedDescription": { + "value": "attribValue" + }, + "definitionID": "d985d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_Value", + "definitionName": { + "value": "Attribute Value" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Product Attributes.Attribute Value", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 1000, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d985d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductAttribs", + "definitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "attribValue", + "storageFieldReferenceID": { + "type": "guid", + "value": "b023eb98-10c7-481d-a809-38af6af65b17" + }, + "valueDefinitionID": "d985d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_Value", + "name": "Attribute Value", + "setDefinitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "parentIdentifier": "d685d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "sku", + "localizedDescription": { + "value": "sku" + }, + "definitionID": "da85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SKU", + "definitionName": { + "value": "SKU" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Product Attributes.SKU", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "da85d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductAttribs", + "definitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "sku", + "storageFieldReferenceID": { + "type": "guid", + "value": "35919388-7813-48d0-a45f-2c0cf64d6e1e" + }, + "valueDefinitionID": "da85d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SKU", + "name": "SKU", + "setDefinitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "parentIdentifier": "d685d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Date", + "description": "updated_at", + "localizedDescription": { + "value": "updated_at" + }, + "definitionID": "db85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Updated_At", + "definitionName": { + "value": "Updated At" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Product Attributes.Updated At", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "db85d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductAttribs", + "definitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "updated_at", + "storageFieldReferenceID": { + "type": "guid", + "value": "a8a96a08-576c-4b45-842c-fe6c36da6f41" + }, + "valueDefinitionID": "db85d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Updated_At", + "name": "Updated At", + "setDefinitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "parentIdentifier": "d685d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Number", + "description": "attributeValueIndex", + "localizedDescription": { + "value": "attributeValueIndex" + }, + "definitionID": "d885d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_Value_Index", + "definitionName": { + "value": "Attribute Value Index" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Product Attributes.Attribute Value Index", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "d885d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductAttribs", + "definitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "attributeValueIndex", + "storageFieldReferenceID": { + "type": "guid", + "value": "619fe747-d142-4522-91dd-4228546d282d" + }, + "valueDefinitionID": "d885d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_Value_Index", + "name": "Attribute Value Index", + "setDefinitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductAttribs", + "setDefinitionName": { + "value": "Predictive Intelligence Product Attributes" + }, + "parentIdentifier": "d685d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "d685d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Product Attributes", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageLogicalType": "DataExtension", + "storageName": "IGO_PRODUCTATTRIBS", + "storageObjectIDs": ["cf85d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "d952de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "d685d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductAttribs", + "name": "Predictive Intelligence Product Attributes" + }, + { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineSubscriptions", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "e651de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "AddressID", + "definitionName": { + "value": "Address ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "GroupConnect LINE Subscriptions.Address ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "length": -1, + "ordinal": 1, + "parentDefinition": { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineSubscriptions", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "AddressId", + "valueDefinitionID": "e651de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "AddressID", + "name": "Address ID", + "setDefinitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineSubscriptions", + "setDefinitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "parentIdentifier": "e551de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "e751de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ChannelID", + "definitionName": { + "value": "Channel ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "GroupConnect LINE Subscriptions.Channel ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": -1, + "ordinal": 2, + "parentDefinition": { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineSubscriptions", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ChannelId", + "valueDefinitionID": "e751de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ChannelID", + "name": "Channel ID", + "setDefinitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineSubscriptions", + "setDefinitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "parentIdentifier": "e551de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Boolean", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Boolean", + "defaultValue": "False", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "e851de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "IsSubscribed", + "definitionName": { + "value": "Is Subscribed" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "GroupConnect LINE Subscriptions.Is Subscribed", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 3, + "parentDefinition": { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineSubscriptions", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "IsSubscribed", + "valueDefinitionID": "e851de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "IsSubscribed", + "name": "Is Subscribed", + "setDefinitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineSubscriptions", + "setDefinitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "parentIdentifier": "e551de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "e951de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedDate", + "definitionName": { + "value": "Created Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "GroupConnect LINE Subscriptions.Created Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 4, + "parentDefinition": { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineSubscriptions", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "CreatedDate", + "valueDefinitionID": "e951de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedDate", + "name": "Created Date", + "setDefinitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineSubscriptions", + "setDefinitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "parentIdentifier": "e551de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "ea51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CreatedBy", + "definitionName": { + "value": "Created By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "GroupConnect LINE Subscriptions.Created By", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 5, + "parentDefinition": { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineSubscriptions", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "CreatedBy", + "valueDefinitionID": "ea51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CreatedBy", + "name": "Created By", + "setDefinitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineSubscriptions", + "setDefinitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "parentIdentifier": "e551de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "eb51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedDate", + "definitionName": { + "value": "Modified Date" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "GroupConnect LINE Subscriptions.Modified Date", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 6, + "parentDefinition": { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineSubscriptions", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ModifiedDate", + "valueDefinitionID": "eb51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedDate", + "name": "Modified Date", + "setDefinitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineSubscriptions", + "setDefinitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "parentIdentifier": "e551de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 3, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "ec51de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "ModifiedBy", + "definitionName": { + "value": "Modified By" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "GroupConnect LINE Subscriptions.Modified By", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 7, + "parentDefinition": { + "definitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "GroupConnectLineSubscriptions", + "definitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "ModifiedBy", + "valueDefinitionID": "ec51de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "ModifiedBy", + "name": "Modified By", + "setDefinitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineSubscriptions", + "setDefinitionName": { + "value": "GroupConnect LINE Subscriptions" + }, + "parentIdentifier": "e551de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "4e9519db-ad21-483a-a3fc-8ab4557eded1", + "applicationKey": "com.exacttarget.GroupConnect", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "localizedDescription": {}, + "fullyQualifiedName": "GroupConnect LINE Subscriptions", + "isCustomObjectBacked": false, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": false, + "isSystemDefined": true, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageObjectIDs": ["dd51de3f-31e2-e611-80cc-1402ec7222b4"], + "setDefinitionID": "e551de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "GroupConnectLineSubscriptions", + "name": "GroupConnect LINE Subscriptions" + }, + { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "f785d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "c885d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "0086d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "c485d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "fa85d645-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "1286d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "1586d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "0b86d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "fb85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "fb85d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Sku", + "localizedDescription": { + "value": "Sku" + }, + "definitionID": "f785d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "SKU", + "definitionName": { + "value": "SKU" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.SKU", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f785d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Sku", + "storageFieldReferenceID": { + "type": "guid", + "value": "8fbf489f-b82c-4c03-ab47-e8576a5625db" + }, + "valueDefinitionID": "f785d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "SKU", + "name": "SKU", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Decimal", + "description": "Price", + "localizedDescription": { + "value": "Price" + }, + "definitionID": "f485d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Price", + "definitionName": { + "value": "Price" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Price", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 18, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f485d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "scale": 2, + "storageName": "Price", + "storageFieldReferenceID": { + "type": "guid", + "value": "f6942680-95e1-4000-9026-77fbfd8d5e41" + }, + "valueDefinitionID": "f485d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Price", + "name": "Price", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Number", + "description": "Quantity", + "localizedDescription": { + "value": "Quantity" + }, + "definitionID": "f585d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Quantity", + "definitionName": { + "value": "Quantity" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Quantity", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f585d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Quantity", + "storageFieldReferenceID": { + "type": "guid", + "value": "29508cf9-fac3-4d64-8e28-e691978bd659" + }, + "valueDefinitionID": "f585d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Quantity", + "name": "Quantity", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "order_number", + "localizedDescription": { + "value": "order_number" + }, + "definitionID": "f385d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Order_Number", + "definitionName": { + "value": "Order Number" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Order Number", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f385d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "order_number", + "storageFieldReferenceID": { + "type": "guid", + "value": "d4024f16-8e2a-4f19-a852-6736071d8ec6" + }, + "valueDefinitionID": "f385d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Order_Number", + "name": "Order Number", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "user_id", + "localizedDescription": { + "value": "user_id" + }, + "definitionID": "fa85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "User_ID", + "definitionName": { + "value": "User ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.User ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "fa85d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "user_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "c318e0f3-c386-4beb-ab78-be4067c5520d" + }, + "valueDefinitionID": "fa85d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "User_ID", + "name": "User ID", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Date", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Date", + "description": "Timestamp", + "localizedDescription": { + "value": "Timestamp" + }, + "definitionID": "f985d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Timestamp", + "definitionName": { + "value": "Timestamp" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Timestamp", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f985d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Timestamp", + "storageFieldReferenceID": { + "type": "guid", + "value": "499933ee-cc51-4a79-8db1-bf6bf304d61f" + }, + "valueDefinitionID": "f985d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Timestamp", + "name": "Timestamp", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "Job_ID", + "localizedDescription": { + "value": "Job_ID" + }, + "definitionID": "f085d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Job_ID", + "definitionName": { + "value": "Job_ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Job_ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f085d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 9, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Job_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "f021da2f-c005-46ca-a561-b6c3d9e095d0" + }, + "valueDefinitionID": "f085d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Job_ID", + "name": "Job_ID", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "List_ID", + "localizedDescription": { + "value": "List_ID" + }, + "definitionID": "f285d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "List_ID", + "definitionName": { + "value": "List_ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.List_ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f285d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "List_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "6a8da7cf-8496-4ffe-8c5c-057fce68cccc" + }, + "valueDefinitionID": "f285d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "List_ID", + "name": "List_ID", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "Batch_ID", + "localizedDescription": { + "value": "Batch_ID" + }, + "definitionID": "ef85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Batch_ID", + "definitionName": { + "value": "Batch_ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Batch_ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "ef85d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 11, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Batch_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "053d483c-62a0-4361-80a4-e99d8bde4550" + }, + "valueDefinitionID": "ef85d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Batch_ID", + "name": "Batch_ID", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Number", + "description": "Landing_URL_ID", + "localizedDescription": { + "value": "Landing_URL_ID" + }, + "definitionID": "f185d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Landing_URL_ID", + "definitionName": { + "value": "Landing_URL_ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 12, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Landing_URL_ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f185d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 12, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Landing_URL_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "d37c4358-5810-4d47-bcec-92829b828703" + }, + "valueDefinitionID": "f185d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Landing_URL_ID", + "name": "Landing_URL_ID", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Numeric", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "Subscriber_ID", + "localizedDescription": { + "value": "Subscriber_ID" + }, + "definitionID": "f885d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Subscriber_ID", + "definitionName": { + "value": "Subscriber_ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 13, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.Subscriber_ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f885d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 13, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Subscriber_ID", + "storageFieldReferenceID": { + "type": "guid", + "value": "5c0c3f04-baec-434a-b463-4f82e3a9fb9c" + }, + "valueDefinitionID": "f885d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Subscriber_ID", + "name": "Subscriber_ID", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "session_id", + "localizedDescription": { + "value": "session_id" + }, + "definitionID": "f685d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "session_id", + "definitionName": { + "value": "session_id" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 14, + "fullyQualifiedName": "Predictive Intelligence Product Purchases.session_id", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f685d645-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 14, + "parentDefinition": { + "definitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProductPurchases", + "definitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "session_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "33bf36ba-c6b7-43cd-b996-abf12ced61fb" + }, + "valueDefinitionID": "f685d645-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "session_id", + "name": "session_id", + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "setDefinitionName": { + "value": "Predictive Intelligence Product Purchases" + }, + "parentIdentifier": "ee85d645-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Product Purchases", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 2, + "storageLogicalType": "DataExtension", + "storageName": "IGO_PURCHASES", + "storageObjectIDs": ["e085d645-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "d752de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProductPurchases", + "name": "Predictive Intelligence Product Purchases" + }, + { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "02ea847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "fullyQualifiedName": "Chat Message Subscriptions.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "02ea847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "f7e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_MobileNumber", + "definitionName": { + "value": "MobileNumber" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Chat Message Subscriptions.MobileNumber", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 254, + "ordinal": 2, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_MobileNumber", + "storageFieldReferenceID": { + "type": "guid", + "value": "169e88d8-d9fe-43f4-82e2-f325674328ee" + }, + "valueDefinitionID": "f7e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_MobileNumber", + "name": "MobileNumber", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "f3e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_ChannelId", + "definitionName": { + "value": "ChannelId" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Chat Message Subscriptions.ChannelId", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 50, + "ordinal": 3, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ChannelId", + "storageFieldReferenceID": { + "type": "guid", + "value": "5f56cbc2-6799-4b37-b24d-38b16e9ed30a" + }, + "valueDefinitionID": "f3e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_ChannelId", + "name": "ChannelId", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "f4e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_ChannelType", + "definitionName": { + "value": "ChannelType" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Chat Message Subscriptions.ChannelType", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 20, + "ordinal": 4, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ChannelType", + "storageFieldReferenceID": { + "type": "guid", + "value": "d442b162-248b-4546-b0ee-7d86d4444d3b" + }, + "valueDefinitionID": "f4e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_ChannelType", + "name": "ChannelType", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "ffe9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_OptOutStatusID", + "definitionName": { + "value": "OptOutStatusID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Chat Message Subscriptions.OptOutStatusID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 5, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "restrictionLookupListID": 15, + "storageName": "_OptOutStatusID", + "storageFieldReferenceID": { + "type": "guid", + "value": "ca82f469-ea9e-44d8-ad4f-d8ed7536518f" + }, + "valueDefinitionID": "ffe9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_OptOutStatusID", + "name": "OptOutStatusID", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "fee9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_OptOutMethodID", + "definitionName": { + "value": "OptOutMethodID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Chat Message Subscriptions.OptOutMethodID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 6, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptOutMethodID", + "storageFieldReferenceID": { + "type": "guid", + "value": "c47ca0dc-f8b3-4476-8ffb-1cbf22b6254e" + }, + "valueDefinitionID": "fee9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_OptOutMethodID", + "name": "OptOutMethodID", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Date", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "fde9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_OptOutDate", + "definitionName": { + "value": "OptOutDate" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "Chat Message Subscriptions.OptOutDate", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 7, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptOutDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "0b8b6cdd-86ba-4d36-8e27-0e0b4bde256f" + }, + "valueDefinitionID": "fde9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_OptOutDate", + "name": "OptOutDate", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "fce9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_OptInStatusID", + "definitionName": { + "value": "OptInStatusID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "Chat Message Subscriptions.OptInStatusID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 8, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptInStatusID", + "storageFieldReferenceID": { + "type": "guid", + "value": "c0f3cd62-55cb-4f61-bb97-d3676e9c7eea" + }, + "valueDefinitionID": "fce9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_OptInStatusID", + "name": "OptInStatusID", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "fbe9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_OptInMethodID", + "definitionName": { + "value": "OptInMethodID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "Chat Message Subscriptions.OptInMethodID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 9, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptInMethodID", + "storageFieldReferenceID": { + "type": "guid", + "value": "a4d5dea8-cd22-435c-b389-9cdce054149c" + }, + "valueDefinitionID": "fbe9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_OptInMethodID", + "name": "OptInMethodID", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Date", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Date", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "fae9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_OptInDate", + "definitionName": { + "value": "OptInDate" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "Chat Message Subscriptions.OptInDate", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": false, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 10, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_OptInDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "4fbd9715-9b10-4e4b-bf89-215786c84e96" + }, + "valueDefinitionID": "fae9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_OptInDate", + "name": "OptInDate", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Byte", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "00ea847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_Source", + "definitionName": { + "value": "Source" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "Chat Message Subscriptions.Source", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 11, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_Source", + "storageFieldReferenceID": { + "type": "guid", + "value": "2b7a081b-127c-4d65-bdfe-f80f274f4580" + }, + "valueDefinitionID": "00ea847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_Source", + "name": "Source", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Text", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Text", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "01ea847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_SourceObjectId ", + "definitionName": { + "value": "SourceObjectId" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 12, + "fullyQualifiedName": "Chat Message Subscriptions.SourceObjectId", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 200, + "ordinal": 12, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_SourceObjectId ", + "storageFieldReferenceID": { + "type": "guid", + "value": "47505922-899e-45b8-a1cc-c0049d280504" + }, + "valueDefinitionID": "01ea847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_SourceObjectId ", + "name": "SourceObjectId", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Date", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "f6e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_CreatedDate", + "definitionName": { + "value": "CreatedDate" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 13, + "fullyQualifiedName": "Chat Message Subscriptions.CreatedDate", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 13, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "ae8a3f3e-1020-484e-8e24-5c11c7393d56" + }, + "valueDefinitionID": "f6e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_CreatedDate", + "name": "CreatedDate", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "f5e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_CreatedBy ", + "definitionName": { + "value": "CreatedBy" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 14, + "fullyQualifiedName": "Chat Message Subscriptions.CreatedBy", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 14, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CreatedBy ", + "storageFieldReferenceID": { + "type": "guid", + "value": "0b7dac0b-728a-4fb7-a63e-c21311d784d3" + }, + "valueDefinitionID": "f5e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_CreatedBy ", + "name": "CreatedBy", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Date", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "Date", + "defaultValue": "GETDATE()", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "f9e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_ModifiedDate", + "definitionName": { + "value": "ModifiedDate" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 15, + "fullyQualifiedName": "Chat Message Subscriptions.ModifiedDate", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 15, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedDate", + "storageFieldReferenceID": { + "type": "guid", + "value": "10d39942-4628-4e99-a927-523fe48d1068" + }, + "valueDefinitionID": "f9e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_ModifiedDate", + "name": "ModifiedDate", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "f8e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "_ModifiedBy ", + "definitionName": { + "value": "ModifiedBy" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 16, + "fullyQualifiedName": "Chat Message Subscriptions.ModifiedBy", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 16, + "parentDefinition": { + "definitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "definitionKey": "ChatMessageSubscriptions", + "definitionName": { + "value": "Chat Message Subscriptions" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_ModifiedBy ", + "storageFieldReferenceID": { + "type": "guid", + "value": "a0486cff-d96e-41dd-9286-c77ddad92f75" + }, + "valueDefinitionID": "f8e9847d-696d-eb11-b81e-48df37d1df5a", + "valueDefinitionKey": "_ModifiedBy ", + "name": "ModifiedBy", + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "setDefinitionName": { + "value": "Chat Message Subscriptions" + }, + "parentIdentifier": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + } + ], + "applicationID": "e25893f9-08f3-480f-8def-7f8ab0583611", + "applicationKey": "com.exacttarget.mobileconnect", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 2, + "createDate": "2021-02-12T13:36:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Chat Message Subscriptions", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": false, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 0, + "storageLogicalType": "DataExtension", + "storageName": "_ChatMessagingSubscription", + "storageObjectIDs": ["e1e9847d-696d-eb11-b81e-48df37d1df5a"], + "storageReferenceID": { + "type": "guid", + "value": "38042500-a868-eb11-b81e-48df37d1df5a" + }, + "setDefinitionID": "f2e9847d-696d-eb11-b81e-48df37d1df5a", + "setDefinitionKey": "ChatMessageSubscriptions", + "name": "Chat Message Subscriptions" + }, + { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "relationships": [ + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": true, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "e152de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeGroup" + }, + "leftRelationshipIDs": [ + { + "type": "int16", + "value": "4" + } + ], + "leftRelationshipReferenceType": "CustomerData", + "relationshipAttributes": [ + { + "leftAttributeID": "1151de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "fc52de3f-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "9885d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "fe52de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "2386d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "2686d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "1e86d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "fe52de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "5a86d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "5d86d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "5286d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "fe52de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "b785d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "ba85d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "b285d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + }, + { + "canModify": false, + "canRemove": false, + "isHidden": false, + "isSystemDefined": false, + "isGroupToSetRelationship": false, + "leftItem": { + "cardinality": "One", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + }, + "relationshipAttributes": [ + { + "leftAttributeID": "fe52de3f-31e2-e611-80cc-1402ec7222b4", + "leftConnectingID": { + "identifierType": "FullyQualifiedName" + }, + "rightAttributeID": "fa85d645-31e2-e611-80cc-1402ec7222b4", + "rightConnectingID": { + "identifierType": "FullyQualifiedName" + } + } + ], + "relationshipID": "fd85d645-31e2-e611-80cc-1402ec7222b4", + "rightItem": { + "cardinality": "Many", + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "identifier": "ee85d645-31e2-e611-80cc-1402ec7222b4", + "relationshipType": "AttributeSet" + } + } + ], + "valueDefinitions": [ + { + "baseType": "Numeric", + "dataSourceID": 1, + "dataSourceName": {}, + "dataType": "LongNumber", + "description": "", + "localizedDescription": { + "value": "" + }, + "definitionID": "0453de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "CustomObjectKey", + "definitionName": { + "value": "Custom Object Key" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 1, + "fullyQualifiedName": "Predictive Intelligence Profiles.Custom Object Key", + "isHidden": true, + "isIdentityValue": true, + "isNullable": false, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "ordinal": 1, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "_CustomObjectKey", + "valueDefinitionID": "0453de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "CustomObjectKey", + "name": "Custom Object Key", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "user_id", + "localizedDescription": { + "value": "user_id" + }, + "definitionID": "fe52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "User_ID", + "definitionName": { + "value": "User ID" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 2, + "fullyQualifiedName": "Predictive Intelligence Profiles.User ID", + "isHidden": false, + "isIdentityValue": false, + "isNullable": false, + "isPrimaryKey": true, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "fe52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 2, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "user_id", + "storageFieldReferenceID": { + "type": "guid", + "value": "eceebc11-78ad-421f-a94f-020667aac6d4" + }, + "valueDefinitionID": "fe52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "User_ID", + "name": "User ID", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "email", + "localizedDescription": { + "value": "email" + }, + "definitionID": "fc52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Email", + "definitionName": { + "value": "Email" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 3, + "fullyQualifiedName": "Predictive Intelligence Profiles.Email", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "fc52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 3, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "email", + "storageFieldReferenceID": { + "type": "guid", + "value": "71e4d8c6-e3d4-430e-9c9f-7e56b092d36a" + }, + "valueDefinitionID": "fc52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Email", + "name": "Email", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Value_1", + "localizedDescription": { + "value": "Value_1" + }, + "definitionID": "ff52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Value_1", + "definitionName": { + "value": "Value 1" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 4, + "fullyQualifiedName": "Predictive Intelligence Profiles.Value 1", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "ff52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 4, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Value_1", + "storageFieldReferenceID": { + "type": "guid", + "value": "8e0573f4-8bc8-4fb3-afc8-ad933a8d823b" + }, + "valueDefinitionID": "ff52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Value_1", + "name": "Value 1", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Value_2", + "localizedDescription": { + "value": "Value_2" + }, + "definitionID": "0053de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Value_2", + "definitionName": { + "value": "Value 2" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 5, + "fullyQualifiedName": "Predictive Intelligence Profiles.Value 2", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "0053de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 5, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Value_2", + "storageFieldReferenceID": { + "type": "guid", + "value": "dcf6690a-4fbe-418c-baa7-e1c50443560b" + }, + "valueDefinitionID": "0053de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Value_2", + "name": "Value 2", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Value_3", + "localizedDescription": { + "value": "Value_3" + }, + "definitionID": "0153de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Value_3", + "definitionName": { + "value": "Value 3" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 6, + "fullyQualifiedName": "Predictive Intelligence Profiles.Value 3", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "0153de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 6, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Value_3", + "storageFieldReferenceID": { + "type": "guid", + "value": "b2a7de94-c985-4337-afcc-445aa80c2ced" + }, + "valueDefinitionID": "0153de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Value_3", + "name": "Value 3", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Value_4", + "localizedDescription": { + "value": "Value_4" + }, + "definitionID": "0253de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Value_4", + "definitionName": { + "value": "Value 4" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 7, + "fullyQualifiedName": "Predictive Intelligence Profiles.Value 4", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "0253de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 7, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Value_4", + "storageFieldReferenceID": { + "type": "guid", + "value": "28984526-60dc-4768-aaff-4018d9842e77" + }, + "valueDefinitionID": "0253de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Value_4", + "name": "Value 4", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Value_5", + "localizedDescription": { + "value": "Value_5" + }, + "definitionID": "0353de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Value_5", + "definitionName": { + "value": "Value 5" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 8, + "fullyQualifiedName": "Predictive Intelligence Profiles.Value 5", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "0353de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 8, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Value_5", + "storageFieldReferenceID": { + "type": "guid", + "value": "aa50e6f3-6863-41fa-a536-8ed1d0fca989" + }, + "valueDefinitionID": "0353de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Value_5", + "name": "Value 5", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Attribute_1", + "localizedDescription": { + "value": "Attribute_1" + }, + "definitionID": "f552de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_1", + "definitionName": { + "value": "Attribute 1" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 9, + "fullyQualifiedName": "Predictive Intelligence Profiles.Attribute 1", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f552de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 9, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Attribute_1", + "storageFieldReferenceID": { + "type": "guid", + "value": "16934a3e-d869-4b8c-b817-48ff5b554f30" + }, + "valueDefinitionID": "f552de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_1", + "name": "Attribute 1", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Attribute_2", + "localizedDescription": { + "value": "Attribute_2" + }, + "definitionID": "f652de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_2", + "definitionName": { + "value": "Attribute 2" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 10, + "fullyQualifiedName": "Predictive Intelligence Profiles.Attribute 2", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f652de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 10, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Attribute_2", + "storageFieldReferenceID": { + "type": "guid", + "value": "121ce628-61aa-4344-91b1-7f27413a16e5" + }, + "valueDefinitionID": "f652de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_2", + "name": "Attribute 2", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Attribute_3", + "localizedDescription": { + "value": "Attribute_3" + }, + "definitionID": "f752de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_3", + "definitionName": { + "value": "Attribute 3" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 11, + "fullyQualifiedName": "Predictive Intelligence Profiles.Attribute 3", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f752de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 11, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Attribute_3", + "storageFieldReferenceID": { + "type": "guid", + "value": "34e53678-e867-4526-9fd6-d31e2771a003" + }, + "valueDefinitionID": "f752de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_3", + "name": "Attribute 3", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Attribute_4", + "localizedDescription": { + "value": "Attribute_4" + }, + "definitionID": "f852de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_4", + "definitionName": { + "value": "Attribute 4" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 12, + "fullyQualifiedName": "Predictive Intelligence Profiles.Attribute 4", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f852de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 12, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Attribute_4", + "storageFieldReferenceID": { + "type": "guid", + "value": "b3efb625-de9a-4eef-b6eb-6add451d2f7a" + }, + "valueDefinitionID": "f852de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_4", + "name": "Attribute 4", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "Attribute_5", + "localizedDescription": { + "value": "Attribute_5" + }, + "definitionID": "f952de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Attribute_5", + "definitionName": { + "value": "Attribute 5" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 13, + "fullyQualifiedName": "Predictive Intelligence Profiles.Attribute 5", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "f952de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 13, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "Attribute_5", + "storageFieldReferenceID": { + "type": "guid", + "value": "f4836380-72eb-49c2-a8af-5a283d168683" + }, + "valueDefinitionID": "f952de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Attribute_5", + "name": "Attribute 5", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "city", + "localizedDescription": { + "value": "city" + }, + "definitionID": "fa52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "City", + "definitionName": { + "value": "City" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 14, + "fullyQualifiedName": "Predictive Intelligence Profiles.City", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "fa52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 14, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "city", + "storageFieldReferenceID": { + "type": "guid", + "value": "486ae151-74f7-4b98-ba9b-6ad927399de9" + }, + "valueDefinitionID": "fa52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "City", + "name": "City", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "region", + "localizedDescription": { + "value": "region" + }, + "definitionID": "fd52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Region", + "definitionName": { + "value": "Region" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 15, + "fullyQualifiedName": "Predictive Intelligence Profiles.Region", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "fd52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 15, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "region", + "storageFieldReferenceID": { + "type": "guid", + "value": "4b8bb8f1-0bcb-4201-9c26-fdd8e10c7ad8" + }, + "valueDefinitionID": "fd52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Region", + "name": "Region", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + { + "baseType": "Text", + "dataSourceID": 5, + "dataSourceName": {}, + "dataType": "Text", + "description": "country", + "localizedDescription": { + "value": "country" + }, + "definitionID": "fb52de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "Country", + "definitionName": { + "value": "Country" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + }, + "displayOrder": 16, + "fullyQualifiedName": "Predictive Intelligence Profiles.Country", + "isHidden": false, + "isIdentityValue": false, + "isNullable": true, + "isPrimaryKey": false, + "isReadOnly": true, + "isSystemDefined": true, + "isUpdateable": false, + "length": 256, + "obfuscationProperties": { + "maskType": "None", + "maskTypeID": 0, + "storageTypeID": 1, + "storageType": "Plain", + "valueDefinitionID": "fb52de3f-31e2-e611-80cc-1402ec7222b4" + }, + "ordinal": 16, + "parentDefinition": { + "definitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "definitionKey": "PredictiveIntelProfiles", + "definitionName": { + "value": "Predictive Intelligence Profiles" + }, + "connectingID": { + "identifierType": "FullyQualifiedName" + } + }, + "parentType": "Set", + "storageName": "country", + "storageFieldReferenceID": { + "type": "guid", + "value": "f9e65e6a-45dc-4f08-9a44-715e6e4763f7" + }, + "valueDefinitionID": "fb52de3f-31e2-e611-80cc-1402ec7222b4", + "valueDefinitionKey": "Country", + "name": "Country", + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "setDefinitionName": { + "value": "Predictive Intelligence Profiles" + }, + "parentIdentifier": "f452de3f-31e2-e611-80cc-1402ec7222b4" + } + ], + "applicationID": "f4981f88-a13e-4abf-b331-47f41c73258d", + "applicationKey": "com.exacttarget.Predictive Web", + "attributeCount": 0, + "canAddValues": false, + "canChangeValues": false, + "canModify": false, + "canRemove": false, + "categoryID": 386, + "createdBy": -1000, + "createDate": "2017-01-24T06:33:00", + "customObjectOwnerMID": 1111111, + "dataRetentionProperties": { + "isRowBasedRetention": false, + "isResetRetentionPeriodOnImport": false, + "isDeleteAtEndOfRetentionPeriod": false, + "periodUnitOfMeasure": 4, + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4" + }, + "localizedDescription": {}, + "fullyQualifiedName": "Predictive Intelligence Profiles", + "isCustomObjectBacked": true, + "isEvent": false, + "isHidden": false, + "isReadOnly": true, + "isRoot": false, + "isSendable": false, + "isShared": false, + "isSystemDefined": true, + "isTestaable": false, + "parentID": "00000000-0000-0000-0000-000000000000", + "relationshipCount": 5, + "storageLogicalType": "DataExtension", + "storageName": "IGO_PROFILES", + "storageObjectIDs": ["e352de3f-31e2-e611-80cc-1402ec7222b4"], + "storageReferenceID": { + "type": "guid", + "value": "d452de3f-31e2-e611-80cc-1402ec7222b4" + }, + "setDefinitionID": "f452de3f-31e2-e611-80cc-1402ec7222b4", + "setDefinitionKey": "PredictiveIntelProfiles", + "name": "Predictive Intelligence Profiles" + } + ], + "responseContext": { + "operationStatus": "OK", + "schemaType": "Contacts", + "populateInternalProperties": false + }, + "requestServiceMessageID": "ae488366-fa20-449a-ba74-ee353a7ab446", + "responseDateTime": "2023-07-12T09:17:32.1332068-06:00", + "resultMessages": [], + "serviceMessageID": "3206d5b6-f603-4049-bce8-6afce627a7c6" +} diff --git a/test/resources/9999999/importFile/build-expected.json b/test/resources/9999999/importFile/build-expected.json new file mode 100644 index 000000000..a1e8feed7 --- /dev/null +++ b/test/resources/9999999/importFile/build-expected.json @@ -0,0 +1,27 @@ +{ + "allowErrors": true, + "c__dataAction": "AddUpdate", + "c__destinationType": "DataExtension", + "c__subscriberImportType": "DataExtension", + "customerKey": "testTemplated_importFile", + "dateFormatLocale": "en-US", + "deleteFile": false, + "description": "17.11.2022", + "fieldMappingType": "InferFromColumnHeadings", + "fieldMappings": [], + "fileNamingPattern": "blabla", + "fileTransferLocationTypeId": 0, + "fileType": "CSV", + "filter": "", + "hasColumnHeader": true, + "isOrderedImport": true, + "isSequential": true, + "maxFileAgeHours": 0, + "maxFileAgeScheduleOffsetHours": 0, + "maxImportFrequencyHours": 0, + "name": "testTemplated_importFile", + "r__dataExtension_CustomerKey": "testTemplated_dataExtension", + "r__fileLocation_name": "ExactTarget Enhanced FTP", + "sendEmailNotification": false, + "standardQuotedStrings": true +} diff --git a/test/resources/9999999/importFile/get-expected.json b/test/resources/9999999/importFile/get-expected.json new file mode 100644 index 000000000..4175265c2 --- /dev/null +++ b/test/resources/9999999/importFile/get-expected.json @@ -0,0 +1,29 @@ +{ + "allowErrors": true, + "createdDate": "2022-11-09T05:32:30.533", + "customerKey": "testExisting_importFile", + "dateFormatLocale": "en-US", + "deleteFile": false, + "description": "17.11.2022", + "fieldMappingType": "InferFromColumnHeadings", + "fieldMappings": [], + "fileNamingPattern": "blabla", + "fileTransferLocationTypeId": 0, + "fileType": "CSV", + "filter": "", + "hasColumnHeader": true, + "isOrderedImport": true, + "isSequential": true, + "maxFileAgeHours": 0, + "maxFileAgeScheduleOffsetHours": 0, + "maxImportFrequencyHours": 0, + "modifiedDate": "2022-11-17T07:13:03.95", + "name": "testExisting_importFile", + "sendEmailNotification": false, + "standardQuotedStrings": true, + "c__dataAction": "AddUpdate", + "c__destinationType": "DataExtension", + "c__subscriberImportType": "DataExtension", + "r__dataExtension_CustomerKey": "testExisting_dataExtension", + "r__fileLocation_name": "ExactTarget Enhanced FTP" +} diff --git a/test/resources/9999999/importFile/patch-expected.json b/test/resources/9999999/importFile/patch-expected.json new file mode 100644 index 000000000..844d9dd59 --- /dev/null +++ b/test/resources/9999999/importFile/patch-expected.json @@ -0,0 +1,29 @@ +{ + "allowErrors": true, + "c__dataAction": "AddUpdate", + "c__destinationType": "DataExtension", + "c__subscriberImportType": "DataExtension", + "createdDate": "2022-11-09T05:53:03.243", + "customerKey": "testExisting_importFile", + "dateFormatLocale": "en-US", + "deleteFile": false, + "description": "updated on deploy", + "fieldMappingType": "InferFromColumnHeadings", + "fieldMappings": [], + "fileNamingPattern": "blabla", + "fileTransferLocationTypeId": 0, + "fileType": "CSV", + "filter": "", + "hasColumnHeader": true, + "isOrderedImport": true, + "isSequential": true, + "maxFileAgeHours": 0, + "maxFileAgeScheduleOffsetHours": 0, + "maxImportFrequencyHours": 0, + "modifiedDate": "2023-07-18T09:11:26.19", + "name": "testExisting_importFile", + "r__dataExtension_CustomerKey": "testExisting_dataExtension", + "r__fileLocation_name": "ExactTarget Enhanced FTP", + "sendEmailNotification": false, + "standardQuotedStrings": true +} diff --git a/test/resources/9999999/importFile/post-expected.json b/test/resources/9999999/importFile/post-expected.json new file mode 100644 index 000000000..0a9440dba --- /dev/null +++ b/test/resources/9999999/importFile/post-expected.json @@ -0,0 +1,29 @@ +{ + "allowErrors": true, + "c__dataAction": "AddUpdate", + "c__destinationType": "DataExtension", + "c__subscriberImportType": "DataExtension", + "createdDate": "2022-11-09T05:53:03.243", + "customerKey": "testNew_importFile", + "dateFormatLocale": "en-US", + "deleteFile": false, + "description": "created via deploy", + "fieldMappingType": "InferFromColumnHeadings", + "fieldMappings": [], + "fileNamingPattern": "blabla", + "fileTransferLocationTypeId": 0, + "fileType": "CSV", + "filter": "", + "hasColumnHeader": true, + "isOrderedImport": true, + "isSequential": true, + "maxFileAgeHours": 0, + "maxFileAgeScheduleOffsetHours": 0, + "maxImportFrequencyHours": 0, + "modifiedDate": "2023-07-18T09:11:26.19", + "name": "testNew_importFile", + "r__dataExtension_CustomerKey": "testExisting_dataExtension", + "r__fileLocation_name": "ExactTarget Enhanced FTP", + "sendEmailNotification": false, + "standardQuotedStrings": true +} diff --git a/test/resources/9999999/importFile/template-expected.json b/test/resources/9999999/importFile/template-expected.json new file mode 100644 index 000000000..6be382e91 --- /dev/null +++ b/test/resources/9999999/importFile/template-expected.json @@ -0,0 +1,27 @@ +{ + "allowErrors": true, + "c__dataAction": "AddUpdate", + "c__destinationType": "DataExtension", + "c__subscriberImportType": "DataExtension", + "customerKey": "{{{prefix}}}importFile", + "dateFormatLocale": "en-US", + "deleteFile": false, + "description": "17.11.2022", + "fieldMappingType": "InferFromColumnHeadings", + "fieldMappings": [], + "fileNamingPattern": "blabla", + "fileTransferLocationTypeId": 0, + "fileType": "CSV", + "filter": "", + "hasColumnHeader": true, + "isOrderedImport": true, + "isSequential": true, + "maxFileAgeHours": 0, + "maxFileAgeScheduleOffsetHours": 0, + "maxImportFrequencyHours": 0, + "name": "{{{prefix}}}importFile", + "r__dataExtension_CustomerKey": "{{{prefix}}}dataExtension", + "r__fileLocation_name": "ExactTarget Enhanced FTP", + "sendEmailNotification": false, + "standardQuotedStrings": true +} diff --git a/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml new file mode 100644 index 000000000..b5b72f81b --- /dev/null +++ b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_pause-response.xml @@ -0,0 +1,32 @@ + + + + RetrieveResponse + urn:uuid:60a72d4a-847e-4d9b-a4eb-a42951078298 + urn:uuid:0b59ed53-72ec-4481-ae06-4ee78912aef2 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-06-01T12:04:20Z + 2023-06-01T12:09:20Z + + + + + + OK + 3b1c8cee-b270-49cb-b77b-e7b33934d1b6 + + + 08afb0e2-b00a-4c88-fixKey_pause + testExisting_automation_fixedKey_paused + testExisting_automation_fixKey_pause + + + + diff --git a/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml new file mode 100644 index 000000000..86773f622 --- /dev/null +++ b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixKey_schedule-response.xml @@ -0,0 +1,32 @@ + + + + RetrieveResponse + urn:uuid:60a72d4a-847e-4d9b-a4eb-a42951078298 + urn:uuid:0b59ed53-72ec-4481-ae06-4ee78912aef2 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-06-01T12:04:20Z + 2023-06-01T12:09:20Z + + + + + + OK + 3b1c8cee-b270-49cb-b77b-e7b33934d1b6 + + + 08afb0e2-b00a-4c88-fixKey_schedule + testExisting_automation_fixedKey_scheduled + testExisting_automation_fixKey_schedule + + + + diff --git a/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml new file mode 100644 index 000000000..ce6885409 --- /dev/null +++ b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_paused-response.xml @@ -0,0 +1,32 @@ + + + + RetrieveResponse + urn:uuid:60a72d4a-847e-4d9b-a4eb-a42951078298 + urn:uuid:0b59ed53-72ec-4481-ae06-4ee78912aef2 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-06-01T12:04:20Z + 2023-06-01T12:09:20Z + + + + + + OK + 3b1c8cee-b270-49cb-b77b-e7b33934d1b6 + + + 08afb0e2-b00a-4c88-fixKey_pause + testExisting_automation_fixedKey_paused + testExisting_automation_fixedKey_paused + + + + diff --git a/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml new file mode 100644 index 000000000..a1517f9db --- /dev/null +++ b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_fixedKey_scheduled-response.xml @@ -0,0 +1,32 @@ + + + + RetrieveResponse + urn:uuid:60a72d4a-847e-4d9b-a4eb-a42951078298 + urn:uuid:0b59ed53-72ec-4481-ae06-4ee78912aef2 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-06-01T12:04:20Z + 2023-06-01T12:09:20Z + + + + + + OK + 3b1c8cee-b270-49cb-b77b-e7b33934d1b6 + + + 08afb0e2-b00a-4c88-fixKey_schedule + testExisting_automation_fixedKey_scheduled + testExisting_automation_fixedKey_scheduled + + + + diff --git a/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml new file mode 100644 index 000000000..6d33a7bfc --- /dev/null +++ b/test/resources/9999999/program/retrieve-CustomerKey=testExisting_automation_pause-response.xml @@ -0,0 +1,30 @@ + + + + RetrieveResponse + urn:uuid:60a72d4a-847e-4d9b-a4eb-a42951078298 + urn:uuid:0b59ed53-72ec-4481-ae06-4ee78912aef2 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-06-01T12:04:20Z + 2023-06-01T12:09:20Z + + + + + + OK + 3b1c8cee-b270-49cb-b77b-e7b33934d1b6 + + + 08afb0e2-b00a-4c88-ad2e-pause + + + + diff --git a/test/resources/9999999/program/retrieve-response.xml b/test/resources/9999999/program/retrieve-response.xml index 67ede7785..6490d5491 100644 --- a/test/resources/9999999/program/retrieve-response.xml +++ b/test/resources/9999999/program/retrieve-response.xml @@ -24,9 +24,27 @@ 08afb0e2-b00a-4c88-ad2e-1f7f8788c560 - testExisting_automation - testExisting_automation + testExisting_automation + testExisting_automation + + + + 08afb0e2-b00a-4c88-ad2e-pause + testExisting_automation_pause + testExisting_automation_pause + + + + 08afb0e2-b00a-4c88-fixKey_schedule + testExisting_automation_fixedKey_scheduled + testExisting_automation_fixKey_schedule + + + + 08afb0e2-b00a-4c88-fixKey_pause + testExisting_automation_fixedKey_paused + testExisting_automation_fixKey_pause - \ No newline at end of file + diff --git a/test/resources/9999999/query/patch_fixKeys-expected.json b/test/resources/9999999/query/patch_fixKeys-expected.json new file mode 100644 index 000000000..77a1e032e --- /dev/null +++ b/test/resources/9999999/query/patch_fixKeys-expected.json @@ -0,0 +1,11 @@ +{ + "name": "testExisting_query_fixedKeys", + "key": "testExisting_query_fixedKeys", + "description": "updated on deploy", + "targetKey": "testExisting_dataExtension", + "createdDate": "2022-04-26T15:21:16.453", + "modifiedDate": "2022-04-26T16:04:15.88", + "targetUpdateTypeName": "Overwrite", + "isFrozen": false, + "r__folder_Path": "Query" +} diff --git a/test/resources/9999999/query/patch_fixKeys-expected.sql b/test/resources/9999999/query/patch_fixKeys-expected.sql new file mode 100644 index 000000000..2a32f5fad --- /dev/null +++ b/test/resources/9999999/query/patch_fixKeys-expected.sql @@ -0,0 +1,6 @@ +SELECT + SubscriberKey AS testField +FROM + _Subscribers +WHERE + country IN ('test') diff --git a/test/resources/9999999/queryDefinition/retrieve-response.xml b/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_queryANDStatus=Active-response.xml similarity index 100% rename from test/resources/9999999/queryDefinition/retrieve-response.xml rename to test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_queryANDStatus=Active-response.xml diff --git a/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml b/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml new file mode 100644 index 000000000..d816ae0d9 --- /dev/null +++ b/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixKeysANDStatus=Active-response.xml @@ -0,0 +1,30 @@ + + + + RetrieveResponse + urn:uuid:7ef0345e-b559-4fc4-8986-47e54e1a8a58 + urn:uuid:b2e814a6-517c-4882-9bbb-238bfce951ce + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-04-11T16:33:48Z + 2023-04-11T16:38:48Z + + + + + + OK + e8eb2988-2f43-4243-a6b0-6ab6b841a6ab + + + 549f0568-607c-4940-afef-437965094dat_fixKeys + + + + diff --git a/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml b/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml new file mode 100644 index 000000000..db31d8288 --- /dev/null +++ b/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testExisting_query_fixedKeysANDStatus=Active-response.xml @@ -0,0 +1,30 @@ + + + + RetrieveResponse + urn:uuid:7ef0345e-b559-4fc4-8986-47e54e1a8a58 + urn:uuid:b2e814a6-517c-4882-9bbb-238bfce951ce + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-04-11T16:33:48Z + 2023-04-11T16:38:48Z + + + + + + OK + e8eb2988-2f43-4243-a6b0-6ab6b841a6ab + + + 549f0568-607c-4940-afef-437965094dat + + + + \ No newline at end of file diff --git a/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml b/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml new file mode 100644 index 000000000..ad6aad842 --- /dev/null +++ b/test/resources/9999999/queryDefinition/retrieve-CustomerKey=testNew_queryANDStatus=Active-response.xml @@ -0,0 +1,30 @@ + + + + RetrieveResponse + urn:uuid:7ef0345e-b559-4fc4-8986-47e54e1a8a58 + urn:uuid:b2e814a6-517c-4882-9bbb-238bfce951ce + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-04-11T16:33:48Z + 2023-04-11T16:38:48Z + + + + + + OK + e8eb2988-2f43-4243-a6b0-6ab6b841a6ab + + + 549f0568-607c-4940-afef-437965094dae + + + + \ No newline at end of file diff --git a/test/resources/9999999/script/build-expected.json b/test/resources/9999999/script/build-expected.json new file mode 100644 index 000000000..6daa00403 --- /dev/null +++ b/test/resources/9999999/script/build-expected.json @@ -0,0 +1,6 @@ +{ + "description": "", + "key": "testTemplated_script", + "name": "testTemplated_script", + "r__folder_Path": "Scripts" +} diff --git a/test/resources/9999999/script/build-expected.ssjs b/test/resources/9999999/script/build-expected.ssjs new file mode 100644 index 000000000..27c4b7e5c --- /dev/null +++ b/test/resources/9999999/script/build-expected.ssjs @@ -0,0 +1 @@ +//dummy diff --git a/test/resources/9999999/script/get-expected.json b/test/resources/9999999/script/get-expected.json new file mode 100644 index 000000000..6572bab64 --- /dev/null +++ b/test/resources/9999999/script/get-expected.json @@ -0,0 +1,8 @@ +{ + "createdDate": "2022-10-20T00:41:26.163", + "description": "", + "key": "testExisting_script", + "modifiedDate": "2022-10-20T00:41:26.163", + "name": "testExisting_script", + "r__folder_Path": "Scripts" +} diff --git a/test/resources/9999999/script/get-expected.ssjs b/test/resources/9999999/script/get-expected.ssjs new file mode 100644 index 000000000..27c4b7e5c --- /dev/null +++ b/test/resources/9999999/script/get-expected.ssjs @@ -0,0 +1 @@ +//dummy diff --git a/test/resources/9999999/script/get_noScriptTag-expected.html b/test/resources/9999999/script/get_noScriptTag-expected.html new file mode 100644 index 000000000..634388fcc --- /dev/null +++ b/test/resources/9999999/script/get_noScriptTag-expected.html @@ -0,0 +1 @@ +// no script tag diff --git a/test/resources/9999999/script/get_noScriptTag-expected.json b/test/resources/9999999/script/get_noScriptTag-expected.json new file mode 100644 index 000000000..f6090804f --- /dev/null +++ b/test/resources/9999999/script/get_noScriptTag-expected.json @@ -0,0 +1,8 @@ +{ + "createdDate": "2022-10-20T00:41:26.163", + "description": "", + "key": "testExisting_script_noScriptTag", + "modifiedDate": "2022-10-20T00:41:26.163", + "name": "testExisting_script_noScriptTag", + "r__folder_Path": "Scripts" +} diff --git a/test/resources/9999999/script/patch-expected.json b/test/resources/9999999/script/patch-expected.json new file mode 100644 index 000000000..81f145a49 --- /dev/null +++ b/test/resources/9999999/script/patch-expected.json @@ -0,0 +1,8 @@ +{ + "createdDate": "2022-10-20T00:41:26.163", + "description": "updated on deploy", + "key": "testExisting_script", + "modifiedDate": "2022-10-20T00:41:26.163", + "name": "testExisting_script", + "r__folder_Path": "Scripts" +} diff --git a/test/resources/9999999/script/patch-expected.ssjs b/test/resources/9999999/script/patch-expected.ssjs new file mode 100644 index 000000000..e20d1ee2d --- /dev/null +++ b/test/resources/9999999/script/patch-expected.ssjs @@ -0,0 +1 @@ +// dummy updated diff --git a/test/resources/9999999/script/post-expected.json b/test/resources/9999999/script/post-expected.json new file mode 100644 index 000000000..a2389daac --- /dev/null +++ b/test/resources/9999999/script/post-expected.json @@ -0,0 +1,8 @@ +{ + "createdDate": "2022-10-20T00:41:26.163", + "description": "created on deploy", + "key": "testNew_script", + "modifiedDate": "2022-10-20T00:41:26.163", + "name": "testNew_script", + "r__folder_Path": "Scripts" +} diff --git a/test/resources/9999999/script/post-expected.ssjs b/test/resources/9999999/script/post-expected.ssjs new file mode 100644 index 000000000..bbfd28311 --- /dev/null +++ b/test/resources/9999999/script/post-expected.ssjs @@ -0,0 +1 @@ +// dummy created diff --git a/test/resources/9999999/script/template-expected.json b/test/resources/9999999/script/template-expected.json new file mode 100644 index 000000000..bd3ae9904 --- /dev/null +++ b/test/resources/9999999/script/template-expected.json @@ -0,0 +1,6 @@ +{ + "description": "", + "key": "{{{prefix}}}script", + "name": "{{{prefix}}}script", + "r__folder_Path": "Scripts" +} diff --git a/test/resources/9999999/script/template-expected.ssjs b/test/resources/9999999/script/template-expected.ssjs new file mode 100644 index 000000000..27c4b7e5c --- /dev/null +++ b/test/resources/9999999/script/template-expected.ssjs @@ -0,0 +1 @@ +//dummy diff --git a/test/resources/9999999/triggeredSend/build-expected.json b/test/resources/9999999/triggeredSend/build-expected.json new file mode 100644 index 000000000..7a80475ea --- /dev/null +++ b/test/resources/9999999/triggeredSend/build-expected.json @@ -0,0 +1,29 @@ +{ + "AllowedSlots": 0, + "AutoAddSubscribers": false, + "AutoUpdateSubscribers": false, + "BatchInterval": 0, + "BccEmail": "", + "CreatedDate": "2018-06-25T05:58:00", + "CustomerKey": "testTemplated_triggeredSend", + "Description": "Unsubscribe_Email", + "DynamicEmailSubject": "You are successfully unsubscribed", + "EmailSubject": "You are successfully unsubscribed", + "FromAddress": "unsubscribe@emails.mcdev.accenture.com", + "FromName": "unsubscribe", + "IsMultipart": false, + "IsWrapped": true, + "Keyword": "", + "ModifiedDate": "2018-06-25T05:58:00", + "Name": "testTemplated_triggeredSend", + "NewSlotTrigger": 0, + "Priority": 4, + "SendClassification": { + "CustomerKey": "Default Transactional" + }, + "SuppressTracking": false, + "TriggeredSendStatus": "New", + "TriggeredSendType": "Continuous", + "r__email_Name": "Sporting Goods for September", + "r__folder_Path": "Triggered Sends" +} diff --git a/test/resources/9999999/triggeredSend/get-expected.json b/test/resources/9999999/triggeredSend/get-expected.json new file mode 100644 index 000000000..49858491f --- /dev/null +++ b/test/resources/9999999/triggeredSend/get-expected.json @@ -0,0 +1,29 @@ +{ + "AllowedSlots": 0, + "AutoAddSubscribers": false, + "AutoUpdateSubscribers": false, + "BatchInterval": 0, + "BccEmail": "", + "CreatedDate": "2018-06-25T05:58:00", + "CustomerKey": "testExisting_triggeredSend", + "Description": "Unsubscribe_Email", + "DynamicEmailSubject": "You are successfully unsubscribed", + "EmailSubject": "You are successfully unsubscribed", + "FromAddress": "unsubscribe@emails.mcdev.accenture.com", + "FromName": "unsubscribe", + "IsMultipart": false, + "IsWrapped": true, + "Keyword": "", + "ModifiedDate": "2018-06-25T05:58:00", + "Name": "testExisting_triggeredSend", + "NewSlotTrigger": 0, + "Priority": 4, + "SendClassification": { + "CustomerKey": "Default Transactional" + }, + "SuppressTracking": false, + "TriggeredSendStatus": "New", + "TriggeredSendType": "Continuous", + "r__email_Name": "Sporting Goods for September", + "r__folder_Path": "Triggered Sends" +} diff --git a/test/resources/9999999/triggeredSend/patch-expected.json b/test/resources/9999999/triggeredSend/patch-expected.json new file mode 100644 index 000000000..89a0da5fd --- /dev/null +++ b/test/resources/9999999/triggeredSend/patch-expected.json @@ -0,0 +1,29 @@ +{ + "AllowedSlots": 0, + "AutoAddSubscribers": false, + "AutoUpdateSubscribers": false, + "BatchInterval": 0, + "BccEmail": "", + "CreatedDate": "2018-06-25T05:58:00", + "CustomerKey": "testExisting_triggeredSend", + "Description": "updated on deploy", + "DynamicEmailSubject": "You are successfully unsubscribed", + "EmailSubject": "You are successfully unsubscribed", + "FromAddress": "unsubscribe@emails.mcdev.accenture.com", + "FromName": "unsubscribe", + "IsMultipart": false, + "IsWrapped": true, + "Keyword": "", + "ModifiedDate": "2018-06-25T05:58:00", + "Name": "testExisting_triggeredSend", + "NewSlotTrigger": 0, + "Priority": 4, + "SendClassification": { + "CustomerKey": "Default Transactional" + }, + "SuppressTracking": false, + "TriggeredSendStatus": "New", + "TriggeredSendType": "Continuous", + "r__email_Name": "Sporting Goods for September", + "r__folder_Path": "Triggered Sends" +} diff --git a/test/resources/9999999/triggeredSend/post-expected.json b/test/resources/9999999/triggeredSend/post-expected.json new file mode 100644 index 000000000..e9031ce8c --- /dev/null +++ b/test/resources/9999999/triggeredSend/post-expected.json @@ -0,0 +1,29 @@ +{ + "AllowedSlots": 0, + "AutoAddSubscribers": false, + "AutoUpdateSubscribers": false, + "BatchInterval": 0, + "BccEmail": "", + "CreatedDate": "2018-06-25T05:58:00", + "CustomerKey": "testNew_triggeredSend", + "Description": "created on deploy", + "DynamicEmailSubject": "You are successfully unsubscribed", + "EmailSubject": "You are successfully unsubscribed", + "FromAddress": "unsubscribe@emails.mcdev.accenture.com", + "FromName": "unsubscribe", + "IsMultipart": false, + "IsWrapped": true, + "Keyword": "", + "ModifiedDate": "2018-06-25T05:58:00", + "Name": "testNew_triggeredSend", + "NewSlotTrigger": 0, + "Priority": 4, + "SendClassification": { + "CustomerKey": "Default Transactional" + }, + "SuppressTracking": false, + "TriggeredSendStatus": "New", + "TriggeredSendType": "Continuous", + "r__email_Name": "Sporting Goods for September", + "r__folder_Path": "Triggered Sends" +} diff --git a/test/resources/9999999/triggeredSend/template-expected.json b/test/resources/9999999/triggeredSend/template-expected.json new file mode 100644 index 000000000..0dd1252a2 --- /dev/null +++ b/test/resources/9999999/triggeredSend/template-expected.json @@ -0,0 +1,29 @@ +{ + "AllowedSlots": 0, + "AutoAddSubscribers": false, + "AutoUpdateSubscribers": false, + "BatchInterval": 0, + "BccEmail": "", + "CreatedDate": "2018-06-25T05:58:00", + "CustomerKey": "{{{prefix}}}triggeredSend", + "Description": "Unsubscribe_Email", + "DynamicEmailSubject": "You are successfully unsubscribed", + "EmailSubject": "You are successfully unsubscribed", + "FromAddress": "unsubscribe@emails.mcdev.accenture.com", + "FromName": "unsubscribe", + "IsMultipart": false, + "IsWrapped": true, + "Keyword": "", + "ModifiedDate": "2018-06-25T05:58:00", + "Name": "{{{prefix}}}triggeredSend", + "NewSlotTrigger": 0, + "Priority": 4, + "SendClassification": { + "CustomerKey": "Default Transactional" + }, + "SuppressTracking": false, + "TriggeredSendStatus": "New", + "TriggeredSendType": "Continuous", + "r__email_Name": "Sporting Goods for September", + "r__folder_Path": "Triggered Sends" +} diff --git a/test/resources/9999999/triggeredSendDefinition/create-response.xml b/test/resources/9999999/triggeredSendDefinition/create-response.xml new file mode 100644 index 000000000..decdebd9d --- /dev/null +++ b/test/resources/9999999/triggeredSendDefinition/create-response.xml @@ -0,0 +1,75 @@ + + + + CreateResponse + urn:uuid:9d4bb477-f79f-4f3f-8304-5c0dcd0e5b66 + urn:uuid:dd06e2ef-2adc-4227-b872-1fc34e48a984 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-08-08T13:42:51Z + 2023-08-08T13:47:51Z + + + + + + + OK + TriggeredSendDefinition created + 0 + 0 + 6cfadead-f635-ee11-b85a-48df37d1de8a + + + + TestEmailAddr + + + 2018-06-25T05:58:00 + 2018-06-25T05:58:00 + 6cfadead-f635-ee11-b85a-48df37d1de8a + testNew_triggeredSend + false + testNew_triggeredSend + created on deploy + + 89348 + + + + Default Transactional + + unsubscribe + unsubscribe@emails.mcdev.accenture.com + false + Continuous + New + + + 483943 + + + false + false + 0 + + You are successfully unsubscribed + You are successfully unsubscribed + false + true + 0 + 0 + 4 + + + 25fe1ec4-1204-42fd-9f0e-32166b82a5a5 + OK + + + diff --git a/test/resources/9999999/triggeredSendDefinition/delete-response.xml b/test/resources/9999999/triggeredSendDefinition/delete-response.xml new file mode 100644 index 000000000..712935560 --- /dev/null +++ b/test/resources/9999999/triggeredSendDefinition/delete-response.xml @@ -0,0 +1,36 @@ + + + + DeleteResponse + urn:uuid:9b7ec2d4-b9cf-4443-aa99-7d790b0d8ed9 + urn:uuid:b9274179-8dba-4434-9f06-7e3f5dcc5d36 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-08-08T13:33:37Z + 2023-08-08T13:38:37Z + + + + + + + OK + TriggeredSendDefinition deleted + 0 + + + + TestKey-419705 + + + e63109fe-085f-4d9d-950b-05d827c74b0e + OK + + + diff --git a/test/resources/9999999/triggeredSendDefinition/retrieve-response.xml b/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml similarity index 94% rename from test/resources/9999999/triggeredSendDefinition/retrieve-response.xml rename to test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml index d2c1eebdd..174140d06 100644 --- a/test/resources/9999999/triggeredSendDefinition/retrieve-response.xml +++ b/test/resources/9999999/triggeredSendDefinition/retrieve-TriggeredSendStatusINNew,Active,Inactive,Moved,Canceled-response.xml @@ -30,12 +30,12 @@ 2018-06-25T05:58:00 2018-06-25T05:58:00 b3150cf0-6e78-e811-80d4-1402ec721c9d - 2621 + testExisting_triggeredSend false - Unsubscribe_Email + testExisting_triggeredSend Unsubscribe_Email - 5654 + 89348 @@ -48,7 +48,7 @@ New - 1960 + 483943 false diff --git a/test/resources/9999999/triggeredSendDefinition/update-response.xml b/test/resources/9999999/triggeredSendDefinition/update-response.xml new file mode 100644 index 000000000..036e60f5e --- /dev/null +++ b/test/resources/9999999/triggeredSendDefinition/update-response.xml @@ -0,0 +1,74 @@ + + + + UpdateResponse + urn:uuid:9d4bb477-f79f-4f3f-8304-5c0dcd0e5b66 + urn:uuid:dd06e2ef-2adc-4227-b872-1fc34e48a984 + http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous + + + 2023-08-08T13:42:51Z + 2023-08-08T13:47:51Z + + + + + + + + OK + TriggeredSendDefinition updated + 0 + + + + TestEmailAddr + + + 2018-06-25T05:58:00 + 2018-06-25T05:58:00 + b3150cf0-6e78-e811-80d4-1402ec721c9d + testExisting_triggeredSend + false + testExisting_triggeredSend + updated on deploy + + 89348 + + + + Default Transactional + + unsubscribe + unsubscribe@emails.mcdev.accenture.com + false + Continuous + New + + + 483943 + + + false + false + 0 + + You are successfully unsubscribed + You are successfully unsubscribed + false + true + 0 + 0 + 4 + + + 25fe1ec4-1204-42fd-9f0e-32166b82a5a5 + OK + + + diff --git a/test/type.attributeGroup.test.js b/test/type.attributeGroup.test.js new file mode 100644 index 000000000..49ff53a13 --- /dev/null +++ b/test/type.attributeGroup.test.js @@ -0,0 +1,55 @@ +const chai = require('chai'); +const chaiFiles = require('chai-files'); + +chai.use(chaiFiles); + +const assert = chai.assert; +const cache = require('../lib/util/cache'); +const testUtils = require('./utils'); +const handler = require('../lib/index'); + +describe('type: attributeGroup', () => { + beforeEach(() => { + testUtils.mockSetup(); + }); + afterEach(() => { + testUtils.mockReset(); + }); + describe('Retrieve ================', () => { + it('Should retrieve a attributeGroup', async () => { + // WHEN + const retrieve = await handler.retrieve('testInstance/testBU', ['attributeGroup']); + + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + assert.equal( + retrieve['testInstance/testBU'].attributeGroup + ? Object.keys(retrieve['testInstance/testBU'].attributeGroup).length + : 0, + 7, + 'only 7 attributeGroups expected in retrieve response' + ); + + // get results from cache + const result = cache.getCache(); + assert.equal( + result.attributeGroup ? Object.keys(result.attributeGroup).length : 0, + 7, + 'only 7 attributeGroups expected in cache' + ); + assert.deepEqual( + await testUtils.getActualJson('ETMobileConnect', 'attributeGroup'), + await testUtils.getExpectedJson('9999999', 'attributeGroup', 'retrieve'), + + 'returned metadata was not equal expected' + ); + + assert.equal( + testUtils.getAPIHistoryLength(), + 2, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); +}); diff --git a/test/type.attributeSet.test.js b/test/type.attributeSet.test.js new file mode 100644 index 000000000..d05ea88a0 --- /dev/null +++ b/test/type.attributeSet.test.js @@ -0,0 +1,55 @@ +const chai = require('chai'); +const chaiFiles = require('chai-files'); + +chai.use(chaiFiles); + +const assert = chai.assert; +const cache = require('../lib/util/cache'); +const testUtils = require('./utils'); +const handler = require('../lib/index'); + +describe('type: attributeSet', () => { + beforeEach(() => { + testUtils.mockSetup(); + }); + afterEach(() => { + testUtils.mockReset(); + }); + describe('Retrieve ================', () => { + it('Should retrieve a attributeSet', async () => { + // WHEN + const retrieve = await handler.retrieve('testInstance/testBU', ['attributeSet']); + + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + assert.equal( + retrieve['testInstance/testBU'].attributeSet + ? Object.keys(retrieve['testInstance/testBU'].attributeSet).length + : 0, + 27, + 'only 27 attributeSets expected in retrieve response' + ); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.attributeSet ? Object.keys(result.attributeSet).length : 0, + 27, + 'only 27 attributeSets expected in cache' + ); + + assert.deepEqual( + await testUtils.getActualJson('MobileSubscriptions', 'attributeSet'), + await testUtils.getExpectedJson('9999999', 'attributeSet', 'retrieve'), + + 'returned metadata was not equal expected' + ); + + assert.equal( + testUtils.getAPIHistoryLength(), + 7, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); +}); diff --git a/test/type.automation.test.js b/test/type.automation.test.js index 5f9dd60bb..b4643f3fe 100644 --- a/test/type.automation.test.js +++ b/test/type.automation.test.js @@ -27,8 +27,8 @@ describe('type: automation', () => { const result = cache.getCache(); assert.equal( result.automation ? Object.keys(result.automation).length : 0, - 1, - 'only one automation expected' + 4, + 'only four automations expected' ); assert.deepEqual( await testUtils.getActualJson('testExisting_automation', 'automation'), @@ -50,7 +50,7 @@ describe('type: automation', () => { assert.equal( testUtils.getAPIHistoryLength(), - 14, + 17, 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' ); return; @@ -62,16 +62,25 @@ describe('type: automation', () => { }); it('Should create & update a automation', async () => { // WHEN - await handler.deploy('testInstance/testBU', ['automation']); + const deployResult = await handler.deploy('testInstance/testBU', ['automation']); // THEN assert.equal(process.exitCode, false, 'deploy should not have thrown an error'); - // get results from cache - const result = cache.getCache(); + // check how many items were deployed assert.equal( - result.automation ? Object.keys(result.automation).length : 0, + deployResult['testInstance/testBU']?.automation + ? Object.keys(deployResult['testInstance/testBU']?.automation).length + : 0, 2, - 'two automations expected' + 'two automations to be deployed' + ); + + // get results from cache + const cacheResult = cache.getCache(); + assert.equal( + cacheResult.automation ? Object.keys(cacheResult.automation).length : 0, + 5, + 'three automations expected' ); // insert assert.deepEqual( @@ -111,12 +120,437 @@ describe('type: automation', () => { assert.equal( testUtils.getAPIHistoryLength(), - 15, + 16, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should update & schedule an automation with --schedule option', async () => { + // WHEN + handler.setOptions({ schedule: true }); + const deployed = await handler.deploy( + 'testInstance/testBU', + ['automation'], + ['testExisting_automation', 'testNew_automation'] + ); + // THEN + assert.equal( + process.exitCode, + false, + 'deploy with --execute should not have thrown an error' + ); + + // get results from cache + const cached = cache.getCache(); + assert.equal( + cached.automation ? Object.keys(cached.automation).length : 0, + 5, + 'five cached automation expected' + ); + assert.equal( + deployed['testInstance/testBU'].automation + ? Object.keys(deployed['testInstance/testBU'].automation).length + : 0, + 2, + 'two deployed automation expected' + ); + assert.equal( + deployed['testInstance/testBU'].automation + ? Object.keys(deployed['testInstance/testBU'].automation)[0] + : null, + 'testNew_automation', + 'expected specific automation to have been deployed' + ); + assert.equal( + deployed['testInstance/testBU'].automation + ? Object.keys(deployed['testInstance/testBU'].automation)[1] + : null, + 'testExisting_automation', + 'expected specific automation to have been deployed' + ); + + // update + assert.deepEqual( + await testUtils.getActualJson('testExisting_automation', 'automation'), + await testUtils.getExpectedJson('9999999', 'automation', 'update'), + 'returned metadata was not equal expected for update' + ); + // check if MD file was created and equals expectations + expect(file(testUtils.getActualDoc('testExisting_automation', 'automation'))).to.equal( + file( + testUtils.getExpectedFile( + '9999999', + 'automation', + 'update-testExisting_automation', + 'md' + ) + ) + ); + + assert.equal( + testUtils.getAPIHistoryLength(), + 24, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should update & runOnce an automation with --execute option', async () => { + // WHEN + handler.setOptions({ execute: true }); + const deployed = await handler.deploy( + 'testInstance/testBU', + ['automation'], + ['testExisting_automation', 'testNew_automation'] + ); + // THEN + assert.equal( + process.exitCode, + false, + 'deploy with --execute should not have thrown an error' + ); + + // get results from cache + const cached = cache.getCache(); + assert.equal( + cached.automation ? Object.keys(cached.automation).length : 0, + 5, + 'five cached automation expected' + ); + assert.equal( + deployed['testInstance/testBU'].automation + ? Object.keys(deployed['testInstance/testBU'].automation).length + : 0, + 2, + 'two deployed automation expected' + ); + assert.equal( + deployed['testInstance/testBU'].automation + ? Object.keys(deployed['testInstance/testBU'].automation)[0] + : null, + 'testNew_automation', + 'expected specific automation to have been deployed' + ); + assert.equal( + deployed['testInstance/testBU'].automation + ? Object.keys(deployed['testInstance/testBU'].automation)[1] + : null, + 'testExisting_automation', + 'expected specific automation to have been deployed' + ); + // update + assert.deepEqual( + await testUtils.getActualJson('testExisting_automation', 'automation'), + await testUtils.getExpectedJson('9999999', 'automation', 'update'), + 'returned metadata was not equal expected for update' + ); + // check if MD file was created and equals expectations + expect(file(testUtils.getActualDoc('testExisting_automation', 'automation'))).to.equal( + file( + testUtils.getExpectedFile( + '9999999', + 'automation', + 'update-testExisting_automation', + 'md' + ) + ) + ); + + assert.equal( + testUtils.getAPIHistoryLength(), + 20, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('FixKeys ================', () => { + beforeEach(() => { + testUtils.mockSetup(true); + }); + it('Should run fixKeys but not find fixable keys and hence stop', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false } }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'automation', [ + 'testExisting_automation', + ]); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // check which keys were fixed + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 0, + 'expected to find no keys to be fixed' + ); + + // get results from cache + const result = cache.getCache(); + assert.equal( + result.automation ? Object.keys(result.automation).length : 0, + 1, + 'one automation expected' + ); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 14, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key w/o re-retrieving, auto-schedule', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false } }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'automation', [ + 'testExisting_automation_fixKey_schedule', + 'testExisting_automation', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_automation_fixedKey_scheduled', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson( + 'testExisting_automation_fixedKey_scheduled', + 'automation' + ), + await testUtils.getExpectedJson('9999999', 'automation', 'patch_fixKeys-schedule'), + 'returned metadata was not equal expected for update automation' + ); + expect( + file( + testUtils.getActualDoc( + 'testExisting_automation_fixedKey_scheduled', + 'automation' + ) + ) + ).to.exist; + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 29, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key w/o re-retrieving, auto-schedule and then --execute', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false }, execute: true }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'automation', [ + 'testExisting_automation_fixKey_schedule', + 'testExisting_automation', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_automation_fixedKey_scheduled', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson( + 'testExisting_automation_fixedKey_scheduled', + 'automation' + ), + await testUtils.getExpectedJson('9999999', 'automation', 'patch_fixKeys-schedule'), + 'returned metadata was not equal expected for update automation' + ); + expect( + file( + testUtils.getActualDoc( + 'testExisting_automation_fixedKey_scheduled', + 'automation' + ) + ) + ).to.exist; + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 31, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key w/o re-retrieving, auto-schedule and then --schedule', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false }, schedule: true }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'automation', [ + 'testExisting_automation_fixKey_schedule', + 'testExisting_automation', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_automation_fixedKey_scheduled', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson( + 'testExisting_automation_fixedKey_scheduled', + 'automation' + ), + await testUtils.getExpectedJson('9999999', 'automation', 'patch_fixKeys-schedule'), + 'returned metadata was not equal expected for update automation' + ); + expect( + file( + testUtils.getActualDoc( + 'testExisting_automation_fixedKey_scheduled', + 'automation' + ) + ) + ).to.exist; + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 32, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key w/o re-retrieving, deploy paused', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false } }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'automation', [ + 'testExisting_automation_fixKey_pause', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_automation_fixedKey_paused', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson( + 'testExisting_automation_fixedKey_paused', + 'automation' + ), + await testUtils.getExpectedJson('9999999', 'automation', 'patch_fixKeys-pause'), + 'returned metadata was not equal expected for update automation' + ); + expect( + file( + testUtils.getActualDoc('testExisting_automation_fixedKey_paused', 'automation') + ) + ).to.exist; + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 26, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key w/o re-retrieving, deploy paused and then --execute', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false }, execute: true }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'automation', [ + 'testExisting_automation_fixKey_pause', + 'testExisting_automation', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_automation_fixedKey_paused', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson( + 'testExisting_automation_fixedKey_paused', + 'automation' + ), + await testUtils.getExpectedJson('9999999', 'automation', 'patch_fixKeys-pause'), + 'returned metadata was not equal expected for update automation' + ); + expect( + file( + testUtils.getActualDoc('testExisting_automation_fixedKey_paused', 'automation') + ) + ).to.exist; + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 30, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key w/o re-retrieving, deploy paused and then --schedule', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false }, schedule: true }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'automation', [ + 'testExisting_automation_fixKey_pause', + 'testExisting_automation', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_automation_fixedKey_paused', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson( + 'testExisting_automation_fixedKey_paused', + 'automation' + ), + await testUtils.getExpectedJson('9999999', 'automation', 'patch_fixKeys-pause'), + 'returned metadata was not equal expected for update automation' + ); + expect( + file( + testUtils.getActualDoc('testExisting_automation_fixedKey_paused', 'automation') + ) + ).to.exist; + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 32, 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' ); return; }); - it('Should change the key during update via --changeKeyValue'); }); describe('Templating ================', () => { it('Should create a automation template via retrieveAsTemplate and build it', async () => { @@ -210,7 +644,7 @@ describe('type: automation', () => { ); assert.equal( testUtils.getAPIHistoryLength(), - 14, + 17, 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' ); return; @@ -256,4 +690,197 @@ describe('type: automation', () => { return; }); }); + describe('Schedule ================', () => { + it('Should schedule an automation by key', async () => { + const executedKeys = await handler.schedule('testInstance/testBU', 'automation', [ + 'testExisting_automation', + ]); + assert.equal(process.exitCode, false, 'execute should not have thrown an error'); + assert.equal( + executedKeys['testInstance/testBU']?.length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + executedKeys['testInstance/testBU'][0], + 'testExisting_automation', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should schedule an automation selected via --like', async () => { + handler.setOptions({ like: { key: 'testExist%automation' } }); + const executedKeys = await handler.schedule('testInstance/testBU', 'automation'); + assert.equal(process.exitCode, false, 'execute should not have thrown an error'); + assert.equal( + executedKeys['testInstance/testBU']?.length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + executedKeys['testInstance/testBU'][0], + 'testExisting_automation', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should not schedule executing an automation because key and --like was specified', async () => { + handler.setOptions({ like: { key: 'testExisting%' } }); + const executedKeys = await handler.schedule('testInstance/testBU', 'automation', [ + 'testExisting_automation', + ]); + assert.equal(process.exitCode, true, 'execute should have thrown an error'); + assert.equal( + Object.keys(executedKeys).length, + 0, + 'automation was not supposed to be executed' + ); + return; + }); + }); + describe('Execute ================', () => { + it('Should execute --schedule an automation by key', async () => { + handler.setOptions({ schedule: true }); + const executedKeys = await handler.execute('testInstance/testBU', 'automation', [ + 'testExisting_automation', + ]); + assert.equal(process.exitCode, false, 'execute should not have thrown an error'); + assert.equal( + executedKeys['testInstance/testBU']?.length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + executedKeys['testInstance/testBU'][0], + 'testExisting_automation', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should execute --schedule an automation selected via --like', async () => { + handler.setOptions({ like: { key: 'testExist%automation' }, schedule: true }); + const executedKeys = await handler.execute('testInstance/testBU', 'automation'); + assert.equal(process.exitCode, false, 'execute should not have thrown an error'); + assert.equal( + executedKeys['testInstance/testBU']?.length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + executedKeys['testInstance/testBU'][0], + 'testExisting_automation', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should not execute --schedule executing an automation because key and --like was specified', async () => { + handler.setOptions({ like: { key: 'testExisting%' }, schedule: true }); + const executedKeys = await handler.execute('testInstance/testBU', 'automation', [ + 'testExisting_automation', + ]); + assert.equal(process.exitCode, true, 'execute should have thrown an error'); + assert.equal( + Object.keys(executedKeys).length, + 0, + 'automation was not supposed to be executed' + ); + return; + }); + it('Should runOnce an automation by key', async () => { + const executedKeys = await handler.execute('testInstance/testBU', 'automation', [ + 'testExisting_automation', + ]); + assert.equal(process.exitCode, false, 'execute should not have thrown an error'); + assert.equal( + executedKeys['testInstance/testBU']?.length, + 1, + 'automation was supposed to be executed' + ); + assert.equal( + executedKeys['testInstance/testBU'][0], + 'testExisting_automation', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should runOnce an automation selected via --like', async () => { + handler.setOptions({ like: { key: 'testExist%automation' } }); + const executedKeys = await handler.execute('testInstance/testBU', 'automation'); + assert.equal(process.exitCode, false, 'execute should not have thrown an error'); + assert.equal( + executedKeys['testInstance/testBU']?.length, + 1, + 'automation was supposed to be executed' + ); + assert.equal( + executedKeys['testInstance/testBU'][0], + 'testExisting_automation', + 'returned keys do not correspond to expected fixed keys' + ); + + return; + }); + it('Should not runOnce executing an automation because key and --like was specified', async () => { + handler.setOptions({ like: { key: 'testExisting%' } }); + const executedKeys = await handler.execute('testInstance/testBU', 'automation', [ + 'testExisting_automation', + ]); + assert.equal(process.exitCode, true, 'execute should have thrown an error'); + assert.equal( + Object.keys(executedKeys).length, + 0, + 'automation was not supposed to be executed' + ); + + return; + }); + }); + describe('Pause ================', () => { + it('Should pause a automation by key', async () => { + const pausedKeys = await handler.pause('testInstance/testBU', 'automation', [ + 'testExisting_automation_pause', + ]); + assert.equal(process.exitCode, false, 'pause should not have thrown an error'); + assert.equal( + pausedKeys['testInstance/testBU']?.length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + pausedKeys['testInstance/testBU'][0], + 'testExisting_automation_pause', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should pause a automation selected via --like', async () => { + handler.setOptions({ like: { key: 'testExisting_a%n_pause' } }); + const pausedKeys = await handler.pause('testInstance/testBU', 'automation'); + assert.equal(process.exitCode, false, 'pause should not have thrown an error'); + assert.equal( + pausedKeys['testInstance/testBU']?.length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + pausedKeys['testInstance/testBU'][0], + 'testExisting_automation_pause', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should not pause automation because key and --like was specified', async () => { + handler.setOptions({ like: { key: 'testExisting_a%n_pause' } }); + const pausedKeys = await handler.pause('testInstance/testBU', 'automation', [ + 'testExisting_automation_pause', + ]); + assert.equal(process.exitCode, true, 'pause should have thrown an error'); + assert.equal( + Object.keys(pausedKeys).length, + 0, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + return; + }); + }); }); diff --git a/test/type.dataExtension.test.js b/test/type.dataExtension.test.js index d1a068379..e9a8a6d93 100644 --- a/test/type.dataExtension.test.js +++ b/test/type.dataExtension.test.js @@ -87,7 +87,6 @@ describe('type: dataExtension', () => { ); return; }); - it('Should change the key during update via --changeKeyValue'); it('Should rename fields'); }); describe('Templating ================', () => { diff --git a/test/type.dataExtract.test.js b/test/type.dataExtract.test.js new file mode 100644 index 000000000..6c2b3434e --- /dev/null +++ b/test/type.dataExtract.test.js @@ -0,0 +1,187 @@ +const chai = require('chai'); +const chaiFiles = require('chai-files'); +const assert = chai.assert; +chai.use(chaiFiles); +const cache = require('../lib/util/cache'); +const testUtils = require('./utils'); +const handler = require('../lib/index'); + +describe('type: dataExtract', () => { + beforeEach(() => { + testUtils.mockSetup(); + }); + afterEach(() => { + testUtils.mockReset(); + }); + + describe('Retrieve ================', () => { + it('Should retrieve a dataExtract', async () => { + // WHEN + await handler.retrieve('testInstance/testBU', ['dataExtract']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.dataExtract ? Object.keys(result.dataExtract).length : 0, + 1, + 'only one dataExtract expected' + ); + assert.deepEqual( + await testUtils.getActualJson('testExisting_dataExtract', 'dataExtract'), + await testUtils.getExpectedJson('9999999', 'dataExtract', 'get'), + 'returned JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 6, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Deploy ================', () => { + beforeEach(() => { + testUtils.mockSetup(true); + }); + it('Should create & upsert a dataExtract', async () => { + // WHEN + + await handler.deploy('testInstance/testBU', ['dataExtract']); + // THEN + assert.equal(process.exitCode, false, 'deploy should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.dataExtract ? Object.keys(result.dataExtract).length : 0, + 2, + 'two dataExtracts expected' + ); + // confirm created item + assert.deepEqual( + await testUtils.getActualJson('testNew_dataExtract', 'dataExtract'), + await testUtils.getExpectedJson('9999999', 'dataExtract', 'post'), + 'returned new-JSON was not equal expected for insert dataExtract' + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_dataExtract', 'dataExtract'), + await testUtils.getExpectedJson('9999999', 'dataExtract', 'patch'), + 'returned existing-JSON was not equal expected for update dataExtract' + ); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 8, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should change the key during update via --changeKeyValue '); + }); + describe('Templating ================', () => { + it('Should create a dataExtract template via retrieveAsTemplate and build it', async () => { + // buildTemplate + const result = await handler.retrieveAsTemplate( + 'testInstance/testBU', + 'dataExtract', + ['testExisting_dataExtract'], + 'testSourceMarket' + ); + assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error'); + assert.equal( + result.dataExtract ? Object.keys(result.dataExtract).length : 0, + 1, + 'only one dataExtract expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson('testExisting_dataExtract', 'dataExtract'), + await testUtils.getExpectedJson('9999999', 'dataExtract', 'template'), + 'returned template JSON was not equal expected' + ); + // buildDefinition + await handler.buildDefinition( + 'testInstance/testBU', + 'dataExtract', + 'testExisting_dataExtract', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_dataExtract', 'dataExtract'), + await testUtils.getExpectedJson('9999999', 'dataExtract', 'build'), + 'returned deployment JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 6, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should create a dataExtract template via buildTemplate and build it', async () => { + // download first before we test buildTemplate + await handler.retrieve('testInstance/testBU', ['dataExtract']); + // buildTemplate + const result = await handler.buildTemplate( + 'testInstance/testBU', + 'dataExtract', + ['testExisting_dataExtract'], + 'testSourceMarket' + ); + assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error'); + assert.equal( + result.dataExtract ? Object.keys(result.dataExtract).length : 0, + 1, + 'only one dataExtract expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson('testExisting_dataExtract', 'dataExtract'), + await testUtils.getExpectedJson('9999999', 'dataExtract', 'template'), + 'returned template JSON was not equal expected' + ); + // buildDefinition + await handler.buildDefinition( + 'testInstance/testBU', + 'dataExtract', + 'testExisting_dataExtract', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_dataExtract', 'dataExtract'), + await testUtils.getExpectedJson('9999999', 'dataExtract', 'build'), + 'returned deployment JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 6, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Delete ================', () => { + it('Should NOT delete the item', async () => { + // WHEN + await handler.deleteByKey('testInstance/testBU', 'dataExtract', [ + 'testExisting_fileTranfer', + ]); + // THEN + assert.equal( + process.exitCode, + 1, + 'deleteByKey should have thrown an error due to lack of support' + ); + return; + }); + }); +}); diff --git a/test/type.fileTransfer.test.js b/test/type.fileTransfer.test.js new file mode 100644 index 000000000..2d33c05b7 --- /dev/null +++ b/test/type.fileTransfer.test.js @@ -0,0 +1,185 @@ +const chai = require('chai'); +const chaiFiles = require('chai-files'); +const assert = chai.assert; +chai.use(chaiFiles); +const cache = require('../lib/util/cache'); +const testUtils = require('./utils'); +const handler = require('../lib/index'); + +describe('type: fileTransfer', () => { + beforeEach(() => { + testUtils.mockSetup(); + }); + afterEach(() => { + testUtils.mockReset(); + }); + + describe('Retrieve ================', () => { + it('Should retrieve a fileTransfer', async () => { + // WHEN + await handler.retrieve('testInstance/testBU', ['fileTransfer']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.fileTransfer ? Object.keys(result.fileTransfer).length : 0, + 1, + 'only one fileTransfer expected' + ); + assert.deepEqual( + await testUtils.getActualJson('testExisting_fileTransfer', 'fileTransfer'), + await testUtils.getExpectedJson('9999999', 'fileTransfer', 'get'), + 'returned JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Deploy ================', () => { + beforeEach(() => { + testUtils.mockSetup(true); + }); + it('Should create & upsert a fileTransfer', async () => { + // WHEN + await handler.deploy('testInstance/testBU', ['fileTransfer']); + // THEN + assert.equal(process.exitCode, false, 'deploy should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.fileTransfer ? Object.keys(result.fileTransfer).length : 0, + 2, + 'two fileTransfers expected' + ); + // confirm created item + assert.deepEqual( + await testUtils.getActualJson('testNew_fileTransfer', 'fileTransfer'), + await testUtils.getExpectedJson('9999999', 'fileTransfer', 'post'), + 'returned JSON was not equal expected for insert fileTransfer' + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_fileTransfer', 'fileTransfer'), + await testUtils.getExpectedJson('9999999', 'fileTransfer', 'patch'), + 'returned JSON was not equal expected for update fileTransfer' + ); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 5, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Templating ================', () => { + it('Should create a fileTransfer template via retrieveAsTemplate and build it', async () => { + // buildTemplate + const result = await handler.retrieveAsTemplate( + 'testInstance/testBU', + 'fileTransfer', + ['testExisting_fileTransfer'], + 'testSourceMarket' + ); + assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error'); + assert.equal( + result.fileTransfer ? Object.keys(result.fileTransfer).length : 0, + 1, + 'only one fileTransfer expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson('testExisting_fileTransfer', 'fileTransfer'), + await testUtils.getExpectedJson('9999999', 'fileTransfer', 'template'), + 'returned template JSON was not equal expected' + ); + // buildDefinition + await handler.buildDefinition( + 'testInstance/testBU', + 'fileTransfer', + 'testExisting_fileTransfer', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_fileTransfer', 'fileTransfer'), + await testUtils.getExpectedJson('9999999', 'fileTransfer', 'build'), + 'returned deployment JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should create a fileTransfer template via buildTemplate and build it', async () => { + // download first before we test buildTemplate + await handler.retrieve('testInstance/testBU', ['fileTransfer']); + // buildTemplate + const result = await handler.buildTemplate( + 'testInstance/testBU', + 'fileTransfer', + ['testExisting_fileTransfer'], + 'testSourceMarket' + ); + assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error'); + assert.equal( + result.fileTransfer ? Object.keys(result.fileTransfer).length : 0, + 1, + 'only one fileTransfer expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson('testExisting_fileTransfer', 'fileTransfer'), + await testUtils.getExpectedJson('9999999', 'fileTransfer', 'template'), + 'returned template JSON was not equal expected' + ); + // buildDefinition + await handler.buildDefinition( + 'testInstance/testBU', + 'fileTransfer', + 'testExisting_fileTransfer', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_fileTransfer', 'fileTransfer'), + await testUtils.getExpectedJson('9999999', 'fileTransfer', 'build'), + 'returned deployment JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Delete ================', () => { + it('Should NOT delete the item', async () => { + // WHEN + await handler.deleteByKey('testInstance/testBU', 'fileTransfer', [ + 'testExisting_fileTranfer', + ]); + // THEN + assert.equal( + process.exitCode, + 1, + 'deleteByKey should have thrown an error due to lack of support' + ); + return; + }); + }); +}); diff --git a/test/type.importFile.test.js b/test/type.importFile.test.js new file mode 100644 index 000000000..76e9c3642 --- /dev/null +++ b/test/type.importFile.test.js @@ -0,0 +1,186 @@ +const chai = require('chai'); +const chaiFiles = require('chai-files'); +const assert = chai.assert; +chai.use(chaiFiles); +const cache = require('../lib/util/cache'); +const testUtils = require('./utils'); +const handler = require('../lib/index'); + +describe('type: importFile', () => { + beforeEach(() => { + testUtils.mockSetup(); + }); + afterEach(() => { + testUtils.mockReset(); + }); + + describe('Retrieve ================', () => { + it('Should retrieve a importFile', async () => { + // WHEN + await handler.retrieve('testInstance/testBU', ['importFile']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.importFile ? Object.keys(result.importFile).length : 0, + 1, + 'only one importFile expected' + ); + assert.deepEqual( + await testUtils.getActualJson('testExisting_importFile', 'importFile'), + await testUtils.getExpectedJson('9999999', 'importFile', 'get'), + 'returned JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 10, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Deploy ================', () => { + beforeEach(() => { + testUtils.mockSetup(true); + }); + it('Should create & upsert a importFile', async () => { + // WHEN + + await handler.deploy('testInstance/testBU', ['importFile']); + // THEN + assert.equal(process.exitCode, false, 'deploy should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.importFile ? Object.keys(result.importFile).length : 0, + 2, + 'two importFiles expected' + ); + // confirm created item + assert.deepEqual( + await testUtils.getActualJson('testNew_importFile', 'importFile'), + await testUtils.getExpectedJson('9999999', 'importFile', 'post'), + 'returned new-JSON was not equal expected for insert importFile' + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_importFile', 'importFile'), + await testUtils.getExpectedJson('9999999', 'importFile', 'patch'), + 'returned existing-JSON was not equal expected for update importFile' + ); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 12, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Templating ================', () => { + it('Should create a importFile template via retrieveAsTemplate and build it', async () => { + // buildTemplate + const result = await handler.retrieveAsTemplate( + 'testInstance/testBU', + 'importFile', + ['testExisting_importFile'], + 'testSourceMarket' + ); + assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error'); + assert.equal( + result.importFile ? Object.keys(result.importFile).length : 0, + 1, + 'only one importFile expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson('testExisting_importFile', 'importFile'), + await testUtils.getExpectedJson('9999999', 'importFile', 'template'), + 'returned template JSON was not equal expected' + ); + // buildDefinition + await handler.buildDefinition( + 'testInstance/testBU', + 'importFile', + 'testExisting_importFile', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_importFile', 'importFile'), + await testUtils.getExpectedJson('9999999', 'importFile', 'build'), + 'returned deployment JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 10, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should create a importFile template via buildTemplate and build it', async () => { + // download first before we test buildTemplate + await handler.retrieve('testInstance/testBU', ['importFile']); + // buildTemplate + const result = await handler.buildTemplate( + 'testInstance/testBU', + 'importFile', + ['testExisting_importFile'], + 'testSourceMarket' + ); + assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error'); + assert.equal( + result.importFile ? Object.keys(result.importFile).length : 0, + 1, + 'only one importFile expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson('testExisting_importFile', 'importFile'), + await testUtils.getExpectedJson('9999999', 'importFile', 'template'), + 'returned template JSON was not equal expected' + ); + // buildDefinition + await handler.buildDefinition( + 'testInstance/testBU', + 'importFile', + 'testExisting_importFile', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_importFile', 'importFile'), + await testUtils.getExpectedJson('9999999', 'importFile', 'build'), + 'returned deployment JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 10, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Delete ================', () => { + it('Should NOT delete the item', async () => { + // WHEN + await handler.deleteByKey('testInstance/testBU', 'importFile', [ + 'testExisting_fileTranfer', + ]); + // THEN + assert.equal( + process.exitCode, + 1, + 'deleteByKey should have thrown an error due to lack of support' + ); + return; + }); + }); +}); diff --git a/test/type.mobileKeyword.test.js b/test/type.mobileKeyword.test.js index 9f37bffc7..9f15adaf0 100644 --- a/test/type.mobileKeyword.test.js +++ b/test/type.mobileKeyword.test.js @@ -120,7 +120,6 @@ describe('type: mobileKeyword', () => { ); return; }); - it('Should change the key during update via --changeKeyValue'); }); describe('Templating ================', () => { it('Should create a mobileKeyword template via retrieveAsTemplate and build it', async () => { diff --git a/test/type.query.test.js b/test/type.query.test.js index edaf72161..c63420be7 100644 --- a/test/type.query.test.js +++ b/test/type.query.test.js @@ -27,8 +27,8 @@ describe('type: query', () => { const result = cache.getCache(); assert.equal( result.query ? Object.keys(result.query).length : 0, - 2, - 'only two queries expected' + 3, + 'only three queries expected' ); // normal test assert.deepEqual( @@ -53,7 +53,7 @@ describe('type: query', () => { ); return; }); - it('Should retrieve one specific query', async () => { + it('Should retrieve one specific query by key', async () => { // WHEN await handler.retrieve('testInstance/testBU', ['query'], ['testExisting_query']); // THEN @@ -80,6 +80,61 @@ describe('type: query', () => { ); return; }); + it('Should retrieve one specific query via --like', async () => { + // WHEN + handler.setOptions({ like: { key: '%Existing_query' } }); + await handler.retrieve('testInstance/testBU', ['query']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.query ? Object.keys(result.query).length : 0, + 3, + 'three queries in cache expected' + ); + assert.deepEqual( + await testUtils.getActualJson('testExisting_query', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'get'), + 'returned metadata was not equal expected' + ); + expect(file(testUtils.getActualFile('testExisting_query', 'query', 'sql'))).to.equal( + file(testUtils.getExpectedFile('9999999', 'query', 'get', 'sql')) + ); + expect(file(testUtils.getActualFile('testExisting_query2', 'query', 'sql'))).to.not + .exist; + assert.equal( + testUtils.getAPIHistoryLength(), + 6, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should not retrieve any query via --like and key due to a mismatching filter', async () => { + // WHEN + handler.setOptions({ like: { key: 'NotExisting_query' } }); + await handler.retrieve('testInstance/testBU', ['query']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.query ? Object.keys(result.query).length : 0, + 3, + 'three queries in cache expected' + ); + + expect(file(testUtils.getActualFile('testExisting_query', 'query', 'sql'))).to.not + .exist; + expect(file(testUtils.getActualFile('testExisting_query2', 'query', 'sql'))).to.not + .exist; + assert.equal( + testUtils.getAPIHistoryLength(), + 6, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); }); describe('Deploy ================', () => { beforeEach(() => { @@ -87,15 +142,26 @@ describe('type: query', () => { }); it('Should create & upsert a query', async () => { // WHEN - await handler.deploy('testInstance/testBU', ['query']); + const resultDeploy = await handler.deploy( + 'testInstance/testBU', + ['query'], + ['testNew_query', 'testExisting_query'] + ); // THEN assert.equal(process.exitCode, false, 'deploy should not have thrown an error'); + assert.equal( + resultDeploy['testInstance/testBU']?.query + ? Object.keys(resultDeploy['testInstance/testBU']?.query).length + : 0, + 2, + 'two queries to be deployed' + ); // get results from cache const result = cache.getCache(); assert.equal( result.query ? Object.keys(result.query).length : 0, - 3, - 'three queries expected' + 4, + 'four queries expected in cache' ); // confirm created item assert.deepEqual( @@ -123,7 +189,356 @@ describe('type: query', () => { ); return; }); - it('Should change the key during update with --changeKeyValue'); + it('Should deploy and execute with --execute', async () => { + handler.setOptions({ execute: true }); + // WHEN + await handler.deploy( + 'testInstance/testBU', + ['query'], + ['testExisting_query', 'testNew_query'] + ); + // THEN + assert.equal( + process.exitCode, + false, + 'deploy with --execute should not have thrown an error' + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_query', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'patch'), + 'returned metadata was not equal expected for insert query' + ); + expect(file(testUtils.getActualFile('testExisting_query', 'query', 'sql'))).to.equal( + file(testUtils.getExpectedFile('9999999', 'query', 'patch', 'sql')) + ); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 12, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('FixKeys ================', () => { + beforeEach(() => { + testUtils.mockSetup(true); + }); + it('Should change the key during update with --changeKeyValue', async () => { + // WHEN + await handler.retrieve( + 'testInstance/testBU', + ['query'], + ['testExisting_query_fixKeys'] + ); + handler.setOptions({ + changeKeyValue: 'testExisting_query_fixedKeys', + fromRetrieve: true, + }); + const deployed = await handler.deploy( + 'testInstance/testBU', + ['query'], + ['testExisting_query_fixKeys'] + ); + // THEN + assert.equal( + process.exitCode, + false, + 'deploy --changeKeyValue should not have thrown an error' + ); + assert.equal( + Object.keys(deployed['testInstance/testBU'].query).length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + Object.keys(deployed['testInstance/testBU'].query)[0], + 'testExisting_query_fixedKeys', + 'returned keys do not correspond to expected fixed keys' + ); + + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_query_fixedKeys', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'patch_fixKeys'), + 'returned metadata was not equal expected for update query' + ); + expect( + file(testUtils.getActualFile('testExisting_query_fixedKeys', 'query', 'sql')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'query', 'patch_fixKeys', 'sql'))); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 14, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should change the key during update with --changeKeyField', async () => { + // WHEN + await handler.retrieve( + 'testInstance/testBU', + ['query'], + ['testExisting_query_fixKeys'] + ); + handler.setOptions({ changeKeyField: 'name', fromRetrieve: true }); + const deployed = await handler.deploy( + 'testInstance/testBU', + ['query'], + ['testExisting_query_fixKeys'] + ); + // THEN + assert.equal( + process.exitCode, + false, + 'deploy --changeKeyValue should not have thrown an error' + ); + assert.equal( + Object.keys(deployed['testInstance/testBU'].query).length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + Object.keys(deployed['testInstance/testBU'].query)[0], + 'testExisting_query_fixedKeys', + 'returned keys do not correspond to expected fixed keys' + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_query_fixedKeys', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'patch_fixKeys'), + 'returned metadata was not equal expected for update query' + ); + expect( + file(testUtils.getActualFile('testExisting_query_fixedKeys', 'query', 'sql')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'query', 'patch_fixKeys', 'sql'))); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 14, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should run fixKeys but not find fixable keys and hence stop', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false } }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'query', [ + 'testExisting_query', + ]); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // check which keys were fixed + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 0, + 'expected to find no keys to be fixed' + ); + + // get results from cache + const result = cache.getCache(); + assert.equal( + result.query ? Object.keys(result.query).length : 0, + 1, + 'one query expected' + ); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 7, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key WITHOUT re-retrieving dependent types', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false } }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'query', [ + 'testExisting_query_fixKeys', + 'testExisting_query', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_query_fixedKeys', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_query_fixedKeys', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'patch_fixKeys'), + 'returned metadata was not equal expected for update query' + ); + expect( + file(testUtils.getActualFile('testExisting_query_fixedKeys', 'query', 'sql')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'query', 'patch_fixKeys', 'sql'))); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 16, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key WITHOUT re-retrieving dependent types and then --execute', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: false }, execute: true }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'query', [ + 'testExisting_query_fixKeys', + 'testExisting_query', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_query_fixedKeys', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal( + process.exitCode, + false, + 'fixKeys with --execute should not have thrown an error' + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_query_fixedKeys', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'patch_fixKeys'), + 'returned metadata was not equal expected for update query' + ); + expect( + file(testUtils.getActualFile('testExisting_query_fixedKeys', 'query', 'sql')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'query', 'patch_fixKeys', 'sql'))); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 18, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key AND re-retrieve dependent types', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: true } }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'query', [ + 'testExisting_query_fixKeys', + 'testExisting_query', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_query_fixedKeys', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_query_fixedKeys', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'patch_fixKeys'), + 'returned metadata was not equal expected for update query' + ); + expect( + file(testUtils.getActualFile('testExisting_query_fixedKeys', 'query', 'sql')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'query', 'patch_fixKeys', 'sql'))); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 33, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys by key AND re-retrieve dependent types and then --execute', async () => { + // WHEN + handler.setOptions({ skipInteraction: { fixKeysReretrieve: true }, execute: true }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'query', [ + 'testExisting_query_fixKeys', + 'testExisting_query', + ]); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_query_fixedKeys', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal( + process.exitCode, + false, + 'fixKeys with --execute should not have thrown an error' + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_query_fixedKeys', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'patch_fixKeys'), + 'returned metadata was not equal expected for update query' + ); + expect( + file(testUtils.getActualFile('testExisting_query_fixedKeys', 'query', 'sql')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'query', 'patch_fixKeys', 'sql'))); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 35, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should fixKeys via --like WITHOUT re-retrieving dependent types', async () => { + // WHEN + handler.setOptions({ + like: { key: 'testExisting_query_f%' }, + skipInteraction: { fixKeysReretrieve: false }, + }); + const resultFixKeys = await handler.fixKeys('testInstance/testBU', 'query'); + assert.equal( + resultFixKeys['testInstance/testBU'].length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + resultFixKeys['testInstance/testBU'][0], + 'testExisting_query_fixedKeys', + 'returned keys do not correspond to expected fixed keys' + ); + // THEN + assert.equal(process.exitCode, false, 'fixKeys should not have thrown an error'); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_query_fixedKeys', 'query'), + await testUtils.getExpectedJson('9999999', 'query', 'patch_fixKeys'), + 'returned metadata was not equal expected for update query' + ); + expect( + file(testUtils.getActualFile('testExisting_query_fixedKeys', 'query', 'sql')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'query', 'patch_fixKeys', 'sql'))); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 13, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); }); describe('Templating ================', () => { it('Should create a query template via retrieveAsTemplate and build it', async () => { @@ -279,14 +694,50 @@ describe('type: query', () => { }); }); describe('Execute ================', () => { - it('Should start executing a query', async () => { - const execute = await handler.execute( - 'testInstance/testBU', - ['query'], - ['testExisting_query'] + it('Should start a query by key', async () => { + const executedKeys = await handler.execute('testInstance/testBU', 'query', [ + 'testExisting_query', + ]); + assert.equal(process.exitCode, false, 'execute should not have thrown an error'); + assert.equal( + executedKeys['testInstance/testBU']?.length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' ); + assert.equal( + executedKeys['testInstance/testBU'][0], + 'testExisting_query', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should start a query selected via --like', async () => { + handler.setOptions({ like: { key: 'testExist%query' } }); + const executedKeys = await handler.execute('testInstance/testBU', 'query'); assert.equal(process.exitCode, false, 'execute should not have thrown an error'); - assert.equal(execute, true, 'query was supposed to be executed'); + assert.equal( + executedKeys['testInstance/testBU']?.length, + 1, + 'returned number of keys does not correspond to number of expected fixed keys' + ); + assert.equal( + executedKeys['testInstance/testBU'][0], + 'testExisting_query', + 'returned keys do not correspond to expected fixed keys' + ); + return; + }); + it('Should not start executing a query because key and --like was specified', async () => { + handler.setOptions({ like: { key: 'testExisting%' } }); + const executedKeys = await handler.execute('testInstance/testBU', 'query', [ + 'testExisting_query', + ]); + assert.equal(process.exitCode, true, 'execute should have thrown an error'); + assert.equal( + Object.keys(executedKeys).length, + 0, + 'query was not supposed to be executed' + ); return; }); }); diff --git a/test/type.script.test.js b/test/type.script.test.js new file mode 100644 index 000000000..84202cfec --- /dev/null +++ b/test/type.script.test.js @@ -0,0 +1,367 @@ +const chai = require('chai'); +const chaiFiles = require('chai-files'); +const assert = chai.assert; +chai.use(chaiFiles); +const expect = chai.expect; +const file = chaiFiles.file; +// const dir = chaiFiles.dir; +const cache = require('../lib/util/cache'); +const testUtils = require('./utils'); +const handler = require('../lib/index'); + +describe('type: script', () => { + beforeEach(() => { + testUtils.mockSetup(); + }); + afterEach(() => { + testUtils.mockReset(); + }); + + describe('Retrieve ================', () => { + it('Should retrieve all scripts', async () => { + // WHEN + const retrieve = await handler.retrieve('testInstance/testBU', ['script']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + + // retrieve result + assert.equal( + retrieve['testInstance/testBU'].script + ? Object.keys(retrieve['testInstance/testBU'].script).length + : 0, + 2, + 'only 2 scripts expected in retrieve response' + ); + + // get results from cache + const result = cache.getCache(); + assert.equal( + result.script ? Object.keys(result.script).length : 0, + 2, + 'only 2 scripts expected' + ); + // normal test + assert.deepEqual( + await testUtils.getActualJson('testExisting_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'get'), + 'returned metadata with correct key was not equal expected' + ); + expect(file(testUtils.getActualFile('testExisting_script', 'script', 'html'))).to.not + .exist; + expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.equal( + file(testUtils.getExpectedFile('9999999', 'script', 'get', 'ssjs')) + ); + + assert.deepEqual( + await testUtils.getActualJson('testExisting_script_noScriptTag', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'get_noScriptTag'), + 'returned metadata was not equal expected' + ); + expect( + file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'html')) + ).to.equal( + file(testUtils.getExpectedFile('9999999', 'script', 'get_noScriptTag', 'html')) + ); + expect( + file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'ssjs')) + ).to.not.exist; + + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should retrieve one specific script by key', async () => { + // WHEN + await handler.retrieve('testInstance/testBU', ['script'], ['testExisting_script']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.script ? Object.keys(result.script).length : 0, + 1, + 'only one script expected' + ); + assert.deepEqual( + await testUtils.getActualJson('testExisting_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'get'), + 'returned metadata was not equal expected' + ); + expect(file(testUtils.getActualFile('testExisting_script', 'script', 'html'))).to.not + .exist; + expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.equal( + file(testUtils.getExpectedFile('9999999', 'script', 'get', 'ssjs')) + ); + + expect( + file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'json')) + ).to.not.exist; + expect( + file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'ssjs')) + ).to.not.exist; + expect( + file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'html')) + ).to.not.exist; + + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should retrieve one specific script via --like', async () => { + // WHEN + handler.setOptions({ like: { key: '%Existing_script' } }); + await handler.retrieve('testInstance/testBU', ['script']); + + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + + // get results from cache + const result = cache.getCache(); + assert.equal( + result.script ? Object.keys(result.script).length : 0, + 2, + 'two scripts in cache expected' + ); + assert.deepEqual( + await testUtils.getActualJson('testExisting_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'get'), + 'returned metadata was not equal expected' + ); + expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.equal( + file(testUtils.getExpectedFile('9999999', 'script', 'get', 'ssjs')) + ); + + expect( + file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'json')) + ).to.not.exist; + expect( + file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'ssjs')) + ).to.not.exist; + expect( + file(testUtils.getActualFile('testExisting_script_noScriptTag', 'script', 'html')) + ).to.not.exist; + + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should not retrieve any script via --like and key due to a mismatching filter', async () => { + // WHEN + handler.setOptions({ like: { key: 'NotExisting_script' } }); + await handler.retrieve('testInstance/testBU', ['script']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + + // get results from cache + const result = cache.getCache(); + assert.equal( + result.script ? Object.keys(result.script).length : 0, + 2, + 'two scripts in cache expected' + ); + + expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.not + .exist; + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Deploy ================', () => { + beforeEach(() => { + testUtils.mockSetup(true); + }); + it('Should create & upsert a script', async () => { + // WHEN + await handler.deploy('testInstance/testBU', ['script']); + // THEN + assert.equal(process.exitCode, false, 'deploy should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.script ? Object.keys(result.script).length : 0, + 3, + 'three scripts expected' + ); + // confirm created item + assert.deepEqual( + await testUtils.getActualJson('testNew_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'post'), + 'returned metadata was not equal expected for insert script' + ); + expect(file(testUtils.getActualFile('testNew_script', 'script', 'ssjs'))).to.equal( + file(testUtils.getExpectedFile('9999999', 'script', 'post', 'ssjs')) + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'patch'), + 'returned metadata was not equal expected for insert script' + ); + expect(file(testUtils.getActualFile('testExisting_script', 'script', 'ssjs'))).to.equal( + file(testUtils.getExpectedFile('9999999', 'script', 'patch', 'ssjs')) + ); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 5, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Templating ================', () => { + it('Should create a script template via retrieveAsTemplate and build it', async () => { + // GIVEN there is a template + const result = await handler.retrieveAsTemplate( + 'testInstance/testBU', + 'script', + ['testExisting_script'], + 'testSourceMarket' + ); + // WHEN + assert.equal( + process.exitCode, + false, + 'retrieveAsTemplate should not have thrown an error' + ); + assert.equal( + result.script ? Object.keys(result.script).length : 0, + 1, + 'only one script expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson('testExisting_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'template'), + 'returned template JSON of retrieveAsTemplate was not equal expected' + ); + expect( + file(testUtils.getActualTemplateFile('testExisting_script', 'script', 'ssjs')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'script', 'template', 'ssjs'))); + // THEN + await handler.buildDefinition( + 'testInstance/testBU', + 'script', + 'testExisting_script', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'build'), + 'returned deployment JSON was not equal expected' + ); + expect( + file(testUtils.getActualDeployFile('testTemplated_script', 'script', 'ssjs')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'script', 'build', 'ssjs'))); + + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + it('Should create a script template via buildTemplate and build it', async () => { + // download first before we test buildTemplate + await handler.retrieve('testInstance/testBU', ['script']); + // GIVEN there is a template + const result = await handler.buildTemplate( + 'testInstance/testBU', + 'script', + ['testExisting_script'], + 'testSourceMarket' + ); + // WHEN + assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error'); + + assert.equal( + result.script ? Object.keys(result.script).length : 0, + 1, + 'only one script expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson('testExisting_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'template'), + 'returned template JSON of buildTemplate was not equal expected' + ); + expect( + file(testUtils.getActualTemplateFile('testExisting_script', 'script', 'ssjs')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'script', 'template', 'ssjs'))); + // THEN + await handler.buildDefinition( + 'testInstance/testBU', + 'script', + 'testExisting_script', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_script', 'script'), + await testUtils.getExpectedJson('9999999', 'script', 'build'), + 'returned deployment JSON was not equal expected' + ); + expect( + file(testUtils.getActualDeployFile('testTemplated_script', 'script', 'ssjs')) + ).to.equal(file(testUtils.getExpectedFile('9999999', 'script', 'build', 'ssjs'))); + + assert.equal( + testUtils.getAPIHistoryLength(), + 3, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Delete ================', () => {}); + describe('CI/CD ================', () => { + it('Should return a list of files based on their type and key', async () => { + // WHEN + const fileList = await handler.getFilesToCommit('testInstance/testBU', 'script', [ + 'testExisting_script', + ]); + // THEN + assert.equal( + process.exitCode, + false, + 'getFilesToCommit should not have thrown an error' + ); + assert.equal(fileList.length, 3, 'expected only 3 file paths (html, json, ssjs)'); + + assert.equal( + fileList[0].split('\\').join('/'), + 'retrieve/testInstance/testBU/script/testExisting_script.script-meta.json', + 'wrong JSON path' + ); + assert.equal( + fileList[1].split('\\').join('/'), + 'retrieve/testInstance/testBU/script/testExisting_script.script-meta.ssjs', + 'wrong JSON path' + ); + return; + }); + }); + describe('Execute ================', () => {}); +}); diff --git a/test/type.triggeredSend.test.js b/test/type.triggeredSend.test.js new file mode 100644 index 000000000..ee548e28c --- /dev/null +++ b/test/type.triggeredSend.test.js @@ -0,0 +1,152 @@ +const chai = require('chai'); +const chaiFiles = require('chai-files'); +const assert = chai.assert; +chai.use(chaiFiles); +const cache = require('../lib/util/cache'); +const testUtils = require('./utils'); +const handler = require('../lib/index'); + +describe('type: triggeredSend', () => { + beforeEach(() => { + testUtils.mockSetup(); + }); + afterEach(() => { + testUtils.mockReset(); + }); + + describe('Retrieve ================', () => { + it('Should retrieve a triggeredSend', async () => { + // WHEN + await handler.retrieve('testInstance/testBU', ['triggeredSend']); + // THEN + assert.equal(process.exitCode, false, 'retrieve should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.triggeredSend ? Object.keys(result.triggeredSend).length : 0, + 1, + 'only one triggeredSend expected' + ); + assert.deepEqual( + await testUtils.getActualJson('testExisting_triggeredSend', 'triggeredSend'), + await testUtils.getExpectedJson('9999999', 'triggeredSend', 'get'), + 'returned JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 10, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Deploy ================', () => { + beforeEach(() => { + testUtils.mockSetup(true); + }); + it('Should create & upsert a triggeredSend', async () => { + // WHEN + await handler.deploy('testInstance/testBU', ['triggeredSend']); + // THEN + assert.equal(process.exitCode, false, 'deploy should not have thrown an error'); + // get results from cache + const result = cache.getCache(); + assert.equal( + result.triggeredSend ? Object.keys(result.triggeredSend).length : 0, + 2, + 'two triggeredSends expected' + ); + // confirm created item + assert.deepEqual( + await testUtils.getActualJson('testNew_triggeredSend', 'triggeredSend'), + await testUtils.getExpectedJson('9999999', 'triggeredSend', 'post'), + 'returned JSON was not equal expected for insert triggeredSend' + ); + // confirm updated item + assert.deepEqual( + await testUtils.getActualJson('testExisting_triggeredSend', 'triggeredSend'), + await testUtils.getExpectedJson('9999999', 'triggeredSend', 'patch'), + 'returned JSON was not equal expected for update triggeredSend' + ); + // check number of API calls + assert.equal( + testUtils.getAPIHistoryLength(), + 12, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Templating ================', () => { + it('Should create a triggeredSend template via buildTemplate and build it', async () => { + // download first before we test buildTemplate + await handler.retrieve('testInstance/testBU', ['triggeredSend']); + // buildTemplate + const result = await handler.buildTemplate( + 'testInstance/testBU', + 'triggeredSend', + ['testExisting_triggeredSend'], + 'testSourceMarket' + ); + assert.equal(process.exitCode, false, 'buildTemplate should not have thrown an error'); + assert.equal( + result.triggeredSend ? Object.keys(result.triggeredSend).length : 0, + 1, + 'only one triggeredSend expected' + ); + assert.deepEqual( + await testUtils.getActualTemplateJson( + 'testExisting_triggeredSend', + 'triggeredSend' + ), + await testUtils.getExpectedJson('9999999', 'triggeredSend', 'template'), + 'returned template JSON was not equal expected' + ); + // buildDefinition + await handler.buildDefinition( + 'testInstance/testBU', + 'triggeredSend', + 'testExisting_triggeredSend', + 'testTargetMarket' + ); + assert.equal( + process.exitCode, + false, + 'buildDefinition should not have thrown an error' + ); + assert.deepEqual( + await testUtils.getActualDeployJson('testTemplated_triggeredSend', 'triggeredSend'), + await testUtils.getExpectedJson('9999999', 'triggeredSend', 'build'), + 'returned deployment JSON was not equal expected' + ); + assert.equal( + testUtils.getAPIHistoryLength(), + 10, + 'Unexpected number of requests made. Run testUtils.logAPIHistoryDebug() to see the requests' + ); + return; + }); + }); + describe('Delete ================', () => { + it('Should delete the item', async () => { + // WHEN + const result = await handler.deleteByKey('testInstance/testBU', 'triggeredSend', [ + 'testExisting_triggeredSend', + ]); + // THEN + assert.equal(process.exitCode, false, 'delete should not have thrown an error'); + + assert.equal(result, true, 'should have deleted the item'); + return; + }); + }); + describe('Refresh ================', () => { + it('Should refresh a triggeredSend by key'); + }); + describe('Start (Execute) ================', () => { + it('Should start a triggeredSend by key'); + }); + describe('Pause ================', () => { + it('Should pause a triggeredSend by key'); + }); +}); diff --git a/test/type.user.test.js b/test/type.user.test.js index cb56fe090..34dda9f2a 100644 --- a/test/type.user.test.js +++ b/test/type.user.test.js @@ -26,8 +26,8 @@ describe('type: user', () => { const result = cache.getCache(); assert.equal( result.user ? Object.keys(result.user).length : 0, - 1, - 'only one user expected' + 3, + 'only three users expected' ); assert.deepEqual( await testUtils.getActualJson('testExisting_user', 'user', '_ParentBU_'), @@ -42,7 +42,7 @@ describe('type: user', () => { { encoding: 'utf8' } ); const regexFindDaysSinceLogin = - /\| (\d*) (seconds|minutes|days|weeks|months|years){1} \|/gm; + /\| (\d*) (seconds|minutes|days|weeks|months|years){1} \|/g; // fetch expected time since last login const expectedDaysSinceLogin = expectedFile.match(regexFindDaysSinceLogin); // load actual file and replace days since last login with expected value @@ -50,7 +50,7 @@ describe('type: user', () => { await File.readFile(`./docs/user/testInstance.users.md`, { encoding: 'utf8', }) - ).replaceAll(regexFindDaysSinceLogin, expectedDaysSinceLogin); + ).replaceAll(regexFindDaysSinceLogin, [expectedDaysSinceLogin[0]]); expect(actualFile).to.equal(expectedFile); assert.equal( @@ -83,7 +83,12 @@ describe('type: user', () => { }); it('Should create & upsert a user', async () => { // WHEN - const expectedCache = ['testNew_user', 'testExisting_user']; + const expectedCache = [ + 'testExisting_user', + 'testExisting_user_inactive', + '45372cbb-06e0-438e-88d8-008981f7a18b', + 'testNew_user', + ]; await handler.deploy('testInstance/_ParentBU_', ['user'], expectedCache); // THEN assert.equal(process.exitCode, false, 'deploy should not have thrown an error'); @@ -92,8 +97,8 @@ describe('type: user', () => { const result = cache.getCache(); assert.equal( result.user ? Object.keys(result.user).length : 0, - 2, - 'two users expected' + 4, + 'four users expected' ); // confirm if result.user only includes values from expectedCache assert.deepEqual( @@ -126,14 +131,22 @@ describe('type: user', () => { }); it('Should not deploy user with Marketing Cloud role', async () => { // WHEN - const expectedCache = ['testExisting_user']; + const expectedCache = [ + 'testExisting_user', + 'testExisting_user_inactive', + '45372cbb-06e0-438e-88d8-008981f7a18b', + ]; await handler.deploy('testInstance/_ParentBU_', ['user'], ['testBlocked_user']); // THEN assert.equal(process.exitCode, 1, 'Deployment should have thrown an error'); // get results from cache const result = cache.getCache(); - assert.equal(result.user ? Object.keys(result.user).length : 0, 1, '1 user expected'); + assert.equal( + result.user ? Object.keys(result.user).length : 0, + 3, + 'three users expected' + ); // confirm if result.user only includes values from expectedCache assert.deepEqual( Object.keys(result.user), @@ -148,7 +161,6 @@ describe('type: user', () => { ); return; }); - it('Should change the key during update with --changeKeyValue'); }); describe('Templating ================', () => { // it('Should create a user template via retrieveAsTemplate and build it', async () => {}); diff --git a/test/utils.js b/test/utils.js index ded3e4312..3e7a5a070 100644 --- a/test/utils.js +++ b/test/utils.js @@ -112,7 +112,10 @@ exports.getExpectedFile = (mid, type, action, ext) => */ exports.mockSetup = (isDeploy) => { - handler.setOptions({ debug: true, noLogFile: true }); + if (!isDeploy) { + // no need to execute this again - already done in standard setup + handler.setOptions({ debug: true, noLogFile: true }); + } apimock = new MockAdapter(axios, { onNoMatch: 'throwException' }); // set access_token to mid to allow for autorouting of mock to correct resources apimock.onPost(authResources.success.url).reply((config) => {