How to transfer administration data

Administration data is stored in the MongoDB database. It can be useful to extract partially data from a given repository (for instance a testing or a project repository) in order to import it in another MongoDB referential. This document describes the tool that transfers partially contents of the administration data.

Another document describes more globally the strategies available and gives solution for global data transfer.

Tools available

Transfer administration data with these two tools:

  1. The export profile tool contains a list of entities and properties to be exported (the export is launched from the definition, and generates a JSON file).

  2. The import tool imports the JSON file generated by the export tool into the destination database.

The export tool is very powerful. It enables exporting to different entities in a single step. Be careful to set up your model correctly:
* A model is a list of entities to be exported, defined by:
* The entity name.
* A check box that enables exporting the whole table and a filter expressed in SData format if only some instances are to be exported.
* Optionally, a list of key records to filter the exported data.
* The list of the entity's properties that identifies the instance as a unique key.
* The list of the properties that have to be included in the exported data (not necessarily all of them).
* When entity A includes an association to instances of entity B, we either export A before, but without the association to B, and then the entity B with a reference to A (otherwise, at import time, the reference will not be found). Depending of the type of reference, the order can be reversed.

Example: user's referential (partial)

In this example, we want to import users, groups, badges, roles and security profiles. The data model's corresponding entities and relations:

Considering this data model:

  • The first entities that don't refer to the others are the securityProfile and securityProfileItems entities. They can be imported first. The various properties in the data model can be given in this entity's profile item attributes list. The corresponding key is codein both cases.
  • Next, import the badges that don't refer to the others. The key will be the code. Note that here the property role that contains a list of the roles using this badge will not be imported (we will import the list of badges with the roles). You must choose to import one of these two relations. If you do both, at execution time, you will get an error (circular reference).
  • Import the roles that have a relation with badges and security profiles (as these entities have already been declared), and are identified by the property code.
  • The next entity to be imported can be the groups that have a relation with the roles and are identified by the property description.
  • And finally, the entity users, identified by the login property, and that has a relation with the roles, can be imported.

You can add a restriction on any entity with SDATA conditions (for instance login -ne 'JOHNDOE' on the user entity), but it is also possible to select the export all checkbox to export all entities.

A good trick to identify the various properties' relations is to use the lookup that allows adding properties in the profile item attributes tab.:

We can see, for instance:

  • That active, changePassword are boolean properties that can directly be imported.
  • That authentication, authenticationName, email, firstName, lastName are properties that are strings (by default) that can directly be imported.
  • That adminTeams, authorTeams, and memberTeams are relations to the teams entity. If you want to import them, you must first import the teams entity.
  • That endpoints is a relation with the entity userEndpoints (that also has another relation to the endpoints entity). If you want to import the user endpoints assignments, you must first import the endpoints entity. And as this entity is also linked to the x3servers and applications, you will also have to import these entities prior to importing the others.

Finally, it is important to understand:

  • That you can partially import the properties of an entity if are not mandatory.
  • That you must import the instances on which other entities are in relation with first.

Complete the setup

Considering the previous steps and explanation, the setup of an import could appear as follows:

Classname Title Use standard profile Filter Export all
securityProfileItems securityProfileItem
securityProfiles securityProfile
badges badge
roles role
groups group
users user login ne 'JOHNDOE'

For every entity, the Profile item key and the Profile item attributes are as follows:

securityProfileItems class
profile item key Profile item attributes
code canCreate
canDelete
canExecute
canRead
canWrite
code
description
securityProfiles class
profile item key Profile item attributes
code authoringLevel
code
description
profileItems
badges class
profile item key Profile item attributes
code code
keyFunction
keyFunction2
noCheck
title
roles class
profile item key Profile item attributes
code badges
code
description
securityProfile
groups class
profile item key Profile item attributes
description description
role
users class
profile item key Profile item attributes
login active
authentication
authenticationName
email
firstName
groups
lastName
login
title

Export result

The file generated by the export tool is a JSON file containing several sections:

The prototype section

This section describes the various entities that have been possibly exported. Here's an example:
"$prototypes": {
        "securityProfileItem": {
            "$key": "code",
            "$localized": [
                "description"
            ]
        },
        "securityProfile": {
            "$key": "code",
            "$localized": [
                "description"
            ],
            "profileItems": {
                "$key": "code",
                "$localized": [
                    "description"
                ]
            }
        },
        "badge": {
            "$key": "code",
            "$localized": [
                "title"
            ]
        },
        "role": {
            "$key": "code",
            "$localized": [
                "description"
            ],
            "badges": {
                "$key": "code"
            },
            "securityProfile": {
                "$key": "code"
            }
        },
        "group": {
            "$key": "description.en-us",
            "$localized": [
                "description",
                "description"
            ],
            "role": {
                "$key": "code"
            }
        },
        "user": {
            "$key": "login",
            "groups": {
                "$key": "description.en-us"
            }
        }
    }

The item section

This section contains an array of different instances. Every instance is identified by a property called $type and is followed by all the properties that have been selected.

For example, this is a first instance for the `securityProfile` entity:
{
  "$type": "securityProfile",
  "code": "User",
  "description": "description_a84c663c-e01a-4e5d-a18a-ed1281095a0f",
  "authoringLevel": "user",
  "profileItems": [
            {
              "code": "myProfile",
              "description": "description_7c20fcce-edd3-4017-a6a3-36e3d8650b9e",
              "canCreate": false,
              "canRead": true,
              "canWrite": true,
              "canDelete": false,
              "canExecute": false
            },
            {
              "code": "users",
              "description": "description_9e93f98f-57c7-451f-83f2-4f0fd5b868c6",
              "canCreate": false,
              "canRead": false,
              "canWrite": false,
              "canDelete": false,
              "canExecute": false
            },
            ...
            {
              "code": "exportData",
              "description": "description_46bb92e2-c0f3-41f6-b6cf-a32398595110",
              "canCreate": false,
              "canRead": false,
              "canWrite": false,
              "canDelete": false,
              "canExecute": false
            }
        ]
}

Example of a badge entity:

{
  "$type": "badge",
  "code": "ERPTRAN",
  "title": "title_963b8544-7fe2-4b99-8b95-ff25b6e77df2",
  "keyFunction": "GESEXS,GESPSH",
  "keyFunction2": "GESEXS, GESPSH"
}

Example of a role entity:

{
  "$type": "role",
  "code": "ERP-APACCMAN",
  "description": "description_7e6964a5-7d2a-47f7-9d24-95c07e60dbad",
  "badges": [
         "ERPFIN"
        ],
  "securityProfile": "User"
}

Example of a group entity:

{
  "$type": "group",
  "description": "description_9ef06d69-dc47-4f73-ad45-a18e569aacf2",
  "role": "ADMIN_ROLE"
}

Example of a users entity:

{
  "$type": "user",
  "login": "ADMNA",
  "title": "mr",
  "firstName": "NA",
  "lastName": "System Administrator",
  "active": true,
  "groups": [
        "description_54c329ea-a303-4fb6-a76c-fe863d65452b",
        "description_af4172b4-4766-4794-b1e4-350baca31ce5"
        ]
}

The localization section

This section contains the translation, for every language, of the localized descriptions defined in the previous data feed by a string "ffff_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" where ffff is the property name (usually title or description) and xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx is a unique id that identifies an instance.

An example of such a section is given here:
"$localization": {
        "de-de": {
            "description_a84c663c-e01a-4e5d-a18a-ed1281095a0f": "Benutzer",
            "description_7c20fcce-edd3-4017-a6a3-36e3d8650b9e": "Persönlichen Profil",
            "title_963b8544-7fe2-4b99-8b95-ff25b6e77df2": "Benutzer Transaktionen",
                        ...
                         },
        "en-en": {
            "description_a84c663c-e01a-4e5d-a18a-ed1281095a0f": "User",
            "description_7c20fcce-edd3-4017-a6a3-36e3d8650b9e": "Personal profile",
            "title_963b8544-7fe2-4b99-8b95-ff25b6e77df2": "User Transactions",
                        ...
                         },
        "fr-fr": {
            "description_a84c663c-e01a-4e5d-a18a-ed1281095a0f": "Utilisateur",
            "description_7c20fcce-edd3-4017-a6a3-36e3d8650b9e": "Profil personnel",
            "title_963b8544-7fe2-4b99-8b95-ff25b6e77df2": "Transactions utilisateur",
                        ...
                         },
                 ...
               }

How to get a description of entities

A very simple way to get a complete description of an entity is to use $prototype URL directly from the browser:

')

where :

  • my_server and my_service define the node.js server where the user is connected.
  • entity is the entity to be displayed.

For instance, if you use:

`')

you will get the following JSON description:

{
  "$type": "application/json",
  "$prototype": "{$baseUrl}/$prototypes('{$representation}.$details')",
  "$url": "{$baseUrl}/{$pluralType}('{$key}')",
  "$shortUrl": "{$baseUrl}/{$pluralType}('{$key}')",
  "$value": "{login}",
  "$title": "{firstName} {lastName}",
  "$key": "{$uuid}",
  "$description": "{firstName}'s profile",
  "$pluralType": "users",
  "$representation": "user",
  "$properties": {
    "login": {
      "$title": "Login",
      "$displayLength": 8,
      "$isUnique": true,
      "$isMandatory": true,
      "$capabilities": "sort,filter,alphaTab",
      "$links": {
        "$details": {
          "$type": "application/json;vnd.sage=syracuse",
          "$url": "{$baseUrl}/{$pluralType}('{$key}')?representation={$representation}.$details&role={$role}"
        }
      },
      "$type": "application/x-string"
    },
    "title": {
      "$title": "Title",
      "$displayLength": 4,
      "$capabilities": "sort,filter,alphaTab",
      "$type": "application/x-choice",
      "$value": {
        "$type": "application/x-string",
        "$enum": [
          {
            "$value": "mr",
            "$title": "Mr."
          },
          {
            "$value": "mrs",
            "$title": "Mrs."
          }
        ]
      }
    },
    "firstName": {
      "$title": "First name",
      "$displayLength": 12,
      "$capabilities": "sort,filter,alphaTab",
      "$type": "application/x-string"
    },
    "lastName": {
      "$title": "Last name",
      "$displayLength": 12,
      "$isMandatory": true,
      "$capabilities": "sort,filter,alphaTab",
      "$links": {
        "$details": {
          "$type": "application/json;vnd.sage=syracuse",
          "$url": "{$baseUrl}/{$pluralType}('{$key}')?representation={$representation}.$details&role={$role}"
        }
      },
      "$type": "application/x-string"
    },
    "active": {
      "$title": "Active",
      "$capabilities": "sort,filter",
      "$type": "application/x-boolean"
    },
    "authentication": {
      "$title": "Authentication",
      "$capabilities": "sort,filter,alphaTab",
      "$type": "application/x-choice",
      "$value": {
        "$type": "application/x-string",
        "$enum": [
          {
            "$value": "",
            "$title": "Standard"
          },
          {
            "$value": "db",
            "$title": "DB"
          },
          {
            "$value": "ldap",
            "$title": "LDAP"
          },
          {
            "$value": "oauth2",
            "$title": "OAuth2"
          }
        ]
      }
    },
    "authenticationName": {
      "$title": "Authentication name",
      "$capabilities": "sort,filter,alphaTab",
      "$type": "application/x-string"
    },
    "email": {
      "$title": "Email",
      "$displayLength": 30,
      "$capabilities": "sort,filter,alphaTab",
      "$type": "application/x-string",
      "$format": "$email"
    },
    "photo": {
      "$title": "Photo",
      "$capabilities": "",
      "$type": "image",
      "$url": "{$baseUrl}/{$pluralType}('{$key}')/photo"
    },
    "infov6": {
      "$title": "Connection information for V6",
      "$capabilities": "sort,filter",
      "$type": "application/x-boolean"
    },
    "userv6": {
      "$title": "User",
      "$capabilities": "sort,filter,alphaTab",
      "$type": "application/x-string"
    },
    "changePassword": {
      "$title": "Require password change",
      "$capabilities": "sort,filter",
      "$type": "application/x-boolean",
      "$isNullable": true
    },
    "explorer": {
      "$title": "Explorer",
      "$capabilities": "sort,filter",
      "$type": "application/x-graph",
      "$format": "d3.nodeChart",
      "$url": "{$baseUrl}/{$pluralType}('{$key}')/$graphs/explorer",
      "$linkCategories": [
        {
          "$name": "groups",
          "$title": "Groups"
        },
        {
          "$name": "groups.endPoints",
          "$title": "Endpoints"
        },
        {
          "$name": "groups.role",
          "$title": "Role"
        },
        {
          "$name": "adminTeams",
          "$title": "Teams administrator"
        },
        {
          "$name": "authorTeams",
          "$title": "Teams author"
        },
        {
          "$name": "memberTeams",
          "$title": "Teams member"
        }
      ],
      "$nodeCategories": [
        {
          "$name": "user",
          "$title": "Users",
          "$selected": true,
          "$prototype": {
            "$properties": {
              "$value": "{login}"
            }
          }
        },
        {
          "$name": "group",
          "$title": "Groups",
          "$selected": true,
          "$prototype": {
            "$properties": {
              "$value": "{description}"
            },
            "$links": {
              "$default": {
                "$url": "{$baseUrl}/groups('{$uuid}')?representation=group.$details",
                "$type": "json"
              }
            }
          }
        },
        {
          "$name": "endPoint",
          "$title": "Endpoints",
          "$selected": false,
          "$prototype": {
            "$properties": {
              "$value": "{description}"
            },
            "$links": {
              "$default": {
                "$url": "{$baseUrl}/endPoints('{$uuid}')?representation=endPoint.$details",
                "$type": "json"
              }
            }
          }
        },
        {
          "$name": "role",
          "$title": "Roles",
          "$selected": false,
          "$prototype": {
            "$properties": {
              "$value": "{description}"
            },
            "$links": {
              "$default": {
                "$url": "{$baseUrl}/roles('{$uuid}')?representation=role.$details",
                "$type": "json"
              }
            }
          }
        },
        {
          "$name": "team",
          "$title": "Teams",
          "$selected": true,
          "$prototype": {
            "$properties": {
              "$value": "{description}"
            },
            "$links": {
              "$default": {
                "$url": "{$baseUrl}/teams('{$uuid}')?representation=team.$details",
                "$type": "json"
              }
            }
          }
        }
      ]
    },
    "groups": {
      "$title": "Groups",
      "$capabilities": "sort,filter",
      "$type": "application/x-array",
      "$item": {
        "$type": "application/x-reference",
        "$item": {
          "$url": "{$baseUrl}/groups('{$key}')?representation={$representation}.$thumb",
          "$shortUrl": "{$baseUrl}/groups('{$key}')",
          "$value": "{description}",
          "$description": "Access administration, groups associate users with roles and endpoints",
          "$key": "{$uuid}",
          "$properties": {
            "description": {
              "$type": "application/x-string"
            }
          },
          "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
          "$representation": "group",
          "$links": {
            "$details": {
              "$type": "application/json;vnd.sage=syracuse",
              "$url": "{$baseUrl}/groups('{$key}')?representation=group.$details&role={$role}"
            }
          }
        }
      }
    },
    "endpoints": {
      "$title": "Endpoints login",
      "$capabilities": "sort,filter",
      "$type": "application/x-array",
      "$item": {
        "$type": "application/json",
        "$prototype": "{$baseUrl}/$prototypes('{$representation}.$details')",
        "$key": "{$uuid}",
        "$pluralType": "userEndpoints",
        "$representation": "userEndpoint",
        "$properties": {
          "login": {
            "$title": "User login",
            "$displayLength": 10,
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-string"
          },
          "endpoint": {
            "$title": "Endpoint",
            "$displayLength": 15,
            "$isMandatory": true,
            "$capabilities": "sort",
            "$type": "application/x-reference",
            "$item": {
              "$url": "{$baseUrl}/endPoints('{$key}')?representation={$representation}.$thumb",
              "$shortUrl": "{$baseUrl}/endPoints('{$key}')",
              "$value": "{description}",
              "$description": "Endpoints describe services locations",
              "$key": "{$uuid}",
              "$properties": {
                "description": {
                  "$type": "application/x-string"
                }
              },
              "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
              "$representation": "endPoint",
              "$links": {
                "$details": {
                  "$type": "application/json;vnd.sage=syracuse",
                  "$url": "{$baseUrl}/endPoints('{$key}')?representation=endPoint.$details&role={$role}"
                }
              }
            }
          },
          "$creUser": {
            "$title": "Created by",
            "$type": "application/x-string",
            "$isDisabled": true,
            "$isHidden": true,
            "$capabilities": "sort,filter"
          },
          "$updUser": {
            "$title": "Updated by",
            "$type": "application/x-string",
            "$isDisabled": true,
            "$isHidden": true,
            "$capabilities": "sort,filter"
          },
          "$creDate": {
            "$title": "Created on",
            "$type": "application/x-datetime",
            "$isDisabled": true,
            "$isHidden": true,
            "$capabilities": "sort,filter"
          },
          "$updDate": {
            "$title": "Updated on",
            "$type": "application/x-datetime",
            "$isDisabled": true,
            "$isHidden": true,
            "$capabilities": "sort,filter"
          }
        },
        "$links": {},
        "$actions": {},
        "$shortUrl": "{$shortUrl}/endpoints('{$uuid}')"
      }
    },
    "locales": {
      "$title": "Locales",
      "$capabilities": "sort,filter",
      "$type": "application/x-array",
      "$item": {
        "$type": "application/json",
        "$prototype": "{$baseUrl}/$prototypes('{$representation}.$details')",
        "$key": "{$uuid}",
        "$description": "Regional preferences",
        "$pluralType": "localePreferences",
        "$representation": "localePreference",
        "$properties": {
          "code": {
            "$title": "Locale code",
            "$isUnique": true,
            "$isMandatory": true,
            "$capabilities": "sort,alphaTab",
            "$links": {
              "$details": {
                "$type": "application/json;vnd.sage=syracuse",
                "$url": "{$baseUrl}/{$pluralType}('{$key}')?representation={$representation}.$details&role={$role}"
              },
              "$lookup": {
                "$type": "application/json;vnd.sage=syracuse",
                "$url": "{$baseUrl}/lookupLocales?representation=lookupLocale.$lookup&role={$role}&trackingId={$trackingId}&binding=code",
                "$result": "name"
              }
            },
            "$type": "application/x-string"
          },
          "description": {
            "$title": "Description",
            "$isMandatory": true,
            "$capabilities": "sort,localize,alphaTab",
            "$links": {
              "$localize": {
                "$title": "Translations",
                "$url": "{$shortUrl}/description/$localize",
                "$method": "GET"
              }
            },
            "$type": "application/x-string"
          },
          "enabled": {
            "$title": "Enabled",
            "$capabilities": "sort",
            "$type": "application/x-boolean"
          },
          "shortDate": {
            "$title": "Date format",
            "$isMandatory": true,
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-string"
          },
          "longDate": {
            "$title": "Long date format",
            "$isMandatory": true,
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-string"
          },
          "shortTime": {
            "$title": "Time format",
            "$isMandatory": true,
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-string"
          },
          "longTime": {
            "$title": "Long time format",
            "$isMandatory": true,
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-string"
          },
          "shortDatetime": {
            "$title": "Date/time format",
            "$isMandatory": true,
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-string"
          },
          "longDatetime": {
            "$title": "Long date/time format",
            "$isMandatory": true,
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-string"
          },
          "firstDayOfWeek": {
            "$title": "First day of week",
            "$isMandatory": true,
            "$capabilities": "sort",
            "$type": "application/x-choice",
            "$value": {
              "$type": "application/x-integer",
              "$enum": [
                {
                  "$value": 0,
                  "$title": "Sunday"
                },
                {
                  "$value": 1,
                  "$title": "Monday"
                },
                {
                  "$value": 2,
                  "$title": "Tuesday"
                },
                {
                  "$value": 3,
                  "$title": "Wednesday"
                },
                {
                  "$value": 4,
                  "$title": "Thursday"
                },
                {
                  "$value": 5,
                  "$title": "Friday"
                },
                {
                  "$value": 6,
                  "$title": "Saturday"
                }
              ]
            }
          },
          "twoDigitYearMax": {
            "$title": "Two-digit max year",
            "$isMandatory": true,
            "$capabilities": "",
            "$type": "application/x-integer",
            "$isDisabled": true
          },
          "numberDecimalSeparator": {
            "$title": "Number decimal separator",
            "$isMandatory": true,
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-choice",
            "$value": {
              "$type": "application/x-string",
              "$enum": [
                {
                  "$value": ".",
                  "$title": ". (dot)"
                },
                {
                  "$value": ",",
                  "$title": ", (comma)"
                }
              ]
            },
            "$format": "$combo"
          },
          "numberGroupSeparator": {
            "$title": "Number group separator",
            "$capabilities": "sort,alphaTab",
            "$type": "application/x-choice",
            "$value": {
              "$type": "application/x-string",
              "$enum": [
                {
                  "$value": " ",
                  "$title": "Space"
                },
                {
                  "$value": ".",
                  "$title": ". (dot)"
                },
                {
                  "$value": ",",
                  "$title": ", (comma)"
                },
                {
                  "$value": "",
                  "$title": "None"
                },
                {
                  "$value": "'",
                  "$title": "' (hyphen)"
                }
              ]
            },
            "$format": "$combo"
          },
          "numberGroupSize": {
            "$title": "Number group size",
            "$capabilities": "sort",
            "$type": "application/x-integer"
          },
          "$creUser": {
            "$title": "Created by",
            "$type": "application/x-string",
            "$isDisabled": true,
            "$isHidden": true,
            "$capabilities": "sort,filter"
          },
          "$updUser": {
            "$title": "Updated by",
            "$type": "application/x-string",
            "$isDisabled": true,
            "$isHidden": true,
            "$capabilities": "sort,filter"
          },
          "$creDate": {
            "$title": "Created on",
            "$type": "application/x-datetime",
            "$isDisabled": true,
            "$isHidden": true,
            "$capabilities": "sort,filter"
          },
          "$updDate": {
            "$title": "Updated on",
            "$type": "application/x-datetime",
            "$isDisabled": true,
            "$isHidden": true,
            "$capabilities": "sort,filter"
          }
        },
        "$links": {},
        "$actions": {},
        "$shortUrl": "{$shortUrl}/locales('{$uuid}')"
      }
    },
    "preferences": {
      "$title": "User preferences",
      "$isExcluded": true,
      "$capabilities": "sort,filter",
      "$type": "application/x-reference",
      "$item": {
        "$url": "{$baseUrl}/userPreferences('{$key}')?representation={$representation}.$thumb",
        "$shortUrl": "{$baseUrl}/userPreferences('{$key}')",
        "$value": "{$key}",
        "$key": "{$uuid}",
        "$properties": {},
        "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
        "$representation": "userPreference",
        "$links": {
          "$details": {
            "$type": "application/json;vnd.sage=syracuse",
            "$url": "{$baseUrl}/userPreferences('{$key}')?representation=userPreference.$details&role={$role}"
          }
        }
      }
    },
    "bookmarks": {
      "$title": "Bookmarks",
      "$isExcluded": true,
      "$capabilities": "sort,filter",
      "$type": "application/x-reference",
      "$item": {
        "$url": "{$baseUrl}/userBookmarks('{$key}')?representation={$representation}.$thumb",
        "$shortUrl": "{$baseUrl}/userBookmarks('{$key}')",
        "$value": "{$key}",
        "$key": "{$uuid}",
        "$properties": {},
        "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
        "$representation": "userBookmark",
        "$links": {
          "$details": {
            "$type": "application/json;vnd.sage=syracuse",
            "$url": "{$baseUrl}/userBookmarks('{$key}')?representation=userBookmark.$details&role={$role}"
          }
        }
      }
    },
    "ldap": {
      "$title": "LDAP instance",
      "$capabilities": "sort,filter",
      "$type": "application/x-reference",
      "$item": {
        "$url": "{$baseUrl}/ldaps('{$key}')?representation={$representation}.$thumb",
        "$shortUrl": "{$baseUrl}/ldaps('{$key}')",
        "$value": "{name} {url}",
        "$description": "LDAP",
        "$key": "{$uuid}",
        "$properties": {
          "name": {
            "$type": "application/x-string"
          },
          "url": {
            "$type": "application/x-string"
          }
        },
        "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
        "$representation": "ldap",
        "$links": {
          "$details": {
            "$type": "application/json;vnd.sage=syracuse",
            "$url": "{$baseUrl}/ldaps('{$key}')?representation=ldap.$details&role={$role}"
          }
        }
      }
    },
    "oauth2": {
      "$title": "OAuth2 instance",
      "$capabilities": "sort,filter",
      "$type": "application/x-reference",
      "$item": {
        "$url": "{$baseUrl}/oauth2s('{$key}')?representation={$representation}.$thumb",
        "$shortUrl": "{$baseUrl}/oauth2s('{$key}')",
        "$value": "{name} {baseSite}",
        "$description": "OAuth2 server {name}",
        "$key": "{$uuid}",
        "$properties": {
          "name": {
            "$type": "application/x-string"
          },
          "baseSite": {
            "$type": "application/x-string"
          }
        },
        "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
        "$representation": "oauth2",
        "$links": {
          "$details": {
            "$type": "application/json;vnd.sage=syracuse",
            "$url": "{$baseUrl}/oauth2s('{$key}')?representation=oauth2.$details&role={$role}"
          }
        }
      }
    },
    "adminTeams": {
      "$title": "Teams administrator",
      "$capabilities": "sort,filter",
      "$type": "application/x-array",
      "$item": {
        "$type": "application/x-reference",
        "$item": {
          "$url": "{$baseUrl}/teams('{$key}')?representation={$representation}.$thumb",
          "$shortUrl": "{$baseUrl}/teams('{$key}')",
          "$value": "{description}",
          "$description": "Teams management",
          "$key": "{$uuid}",
          "$properties": {
            "description": {
              "$type": "application/x-string"
            }
          },
          "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
          "$representation": "team",
          "$links": {
            "$details": {
              "$type": "application/json;vnd.sage=syracuse",
              "$url": "{$baseUrl}/teams('{$key}')?representation=team.$details&role={$role}"
            }
          }
        }
      }
    },
    "authorTeams": {
      "$title": "Teams author",
      "$capabilities": "sort,filter",
      "$type": "application/x-array",
      "$item": {
        "$type": "application/x-reference",
        "$item": {
          "$url": "{$baseUrl}/teams('{$key}')?representation={$representation}.$thumb",
          "$shortUrl": "{$baseUrl}/teams('{$key}')",
          "$value": "{description}",
          "$description": "Teams management",
          "$key": "{$uuid}",
          "$properties": {
            "description": {
              "$type": "application/x-string"
            }
          },
          "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
          "$representation": "team",
          "$links": {
            "$details": {
              "$type": "application/json;vnd.sage=syracuse",
              "$url": "{$baseUrl}/teams('{$key}')?representation=team.$details&role={$role}"
            }
          }
        }
      }
    },
    "memberTeams": {
      "$title": "Teams member",
      "$capabilities": "sort,filter",
      "$type": "application/x-array",
      "$item": {
        "$type": "application/x-reference",
        "$item": {
          "$url": "{$baseUrl}/teams('{$key}')?representation={$representation}.$thumb",
          "$shortUrl": "{$baseUrl}/teams('{$key}')",
          "$value": "{description}",
          "$description": "Teams management",
          "$key": "{$uuid}",
          "$properties": {
            "description": {
              "$type": "application/x-string"
            }
          },
          "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
          "$representation": "team",
          "$links": {
            "$details": {
              "$type": "application/json;vnd.sage=syracuse",
              "$url": "{$baseUrl}/teams('{$key}')?representation=team.$details&role={$role}"
            }
          }
        }
      }
    },
    "landingPages": {
      "$title": "Landing pages",
      "$capabilities": "sort,filter",
      "$type": "application/x-array",
      "$item": {
        "$type": "application/x-reference",
        "$item": {
          "$url": "{$baseUrl}/landingPages('{$key}')?representation={$representation}.$thumb",
          "$shortUrl": "{$baseUrl}/landingPages('{$key}')",
          "$value": "{title}",
          "$key": "{$uuid}",
          "$properties": {
            "title": {
              "$type": "application/x-string"
            }
          },
          "$prototype": "{$baseUrl}/$prototypes('{$representation}.$thumb')",
          "$representation": "landingPage",
          "$links": {
            "$details": {
              "$type": "application/json;vnd.sage=syracuse",
              "$url": "{$baseUrl}/landingPages('{$key}')?representation=landingPage.$details&role={$role}"
            }
          }
        }
      }
    },
    "$creUser": {
      "$title": "Created by",
      "$type": "application/x-string",
      "$isDisabled": true,
      "$isHidden": true,
      "$capabilities": "sort,filter"
    },
    "$updUser": {
      "$title": "Updated by",
      "$type": "application/x-string",
      "$isDisabled": true,
      "$isHidden": true,
      "$capabilities": "sort,filter"
    },
    "$creDate": {
      "$title": "Created on",
      "$type": "application/x-datetime",
      "$isDisabled": true,
      "$isHidden": true,
      "$capabilities": "sort,filter"
    },
    "$updDate": {
      "$title": "Updated on",
      "$type": "application/x-datetime",
      "$isDisabled": true,
      "$isHidden": true,
      "$capabilities": "sort,filter"
    }
  },
  "$links": {
    "testlogin": {
      "$type": "application/json;vnd.sage=syracuse",
      "$url": "{$baseUrl}/{$pluralType}('{$uuid}')/$service/testlogin?representation={$representation}.$details&pwd={pwd}",
      "$title": "LDAP Test login",
      "$method": "post",
      "$parameters": {
        "$properties": {
          "pwd": {
            "$title": "Password",
            "$type": "application/x-password",
            "$value": ""
          }
        }
      }
    },
    "$edit": {
      "$type": "application/json;vnd.sage=syracuse",
      "$title": "Edit",
      "$url": "{$baseUrl}/{$pluralType}('{$key}')/$workingCopies?representation={$representation}.$edit&role={$role}",
      "$method": "POST"
    },
    "$delete": {
      "$title": "Delete",
      "$confirm": "The record {login} will be deleted. Confirm ?",
      "$url": "{$baseUrl}/{$pluralType}('{$key}')?representation={$representation}.$details&role={$role}",
      "$type": "application/json;vnd.sage=syracuse",
      "$method": "DELETE"
    },
    "$query": {
      "$type": "application/json;vnd.sage=syracuse",
      "$title": "List of users",
      "$url": "{$baseUrl}/{$pluralType}?representation={$representation}.$query&role={$role}"
    },
    "$help": {
      "$url": "{$baseHelpUrl}/../Administration-reference/Users.html",
      "$title": "Help",
      "$type": "text/html",
      "$target": "help"
    },
    "$wordreport": {
      "$title": "Word report",
      "$url": "{$baseUrl}/{$pluralType}('{$key}')?representation={$representation}.$details&role={$role}&reportMode={reportMode}&doc_uuid={document}",
      "$type": "application/syracuse-word-report",
      "$confirm": "Have you installed the SyracuseAddins for Office?",
      "$officeAddinSetup": "/msoffice/lib/general/addIn/SyracuseOfficeAddinsSetup.EXE",
      "$parameters": {
        "$url": "/sdata/syracuse/collaboration/syracuse/msoReportModes/$template/$workingCopies?representation=msoReportMode.$edit&role={$role}&$msoRepr={$representation}.$details&$msoLocale=&$msoCpy=&$msoLeg=&$msoActiv=&$msoEndpoint=",
        "$method": "POST",
        "$properties": {
          "dummy": {
            "$title": "dummy",
            "$type": "application/x-string"
          }
        }
      }
    },
    "$excelreport": {
      "$title": "Excel report",
      "$url": "{$baseUrl}/{$pluralType}('{$key}')?representation={$representation}.$details&role={$role}&excelReportMode={excelReportMode}&doc_uuid={document}",
      "$type": "application/syracuse-excel-worksheet",
      "$confirm": "Have you installed the SyracuseAddins for Office?",
      "$officeAddinSetup": "/msoffice/lib/general/addIn/SyracuseOfficeAddinsSetup.EXE",
      "$parameters": {
        "$url": "/sdata/syracuse/collaboration/syracuse/msoExcelReportModes/$template/$workingCopies?representation=msoExcelReportMode.$edit&role={$role}&$msoExcelRepr={$representation}.$details&$msoLocale=&$msoCpy=&$msoLeg=&$msoActiv=&$msoEndpoint=",
        "$method": "POST",
        "$properties": {
          "dummy": {
            "$title": "dummy",
            "$type": "application/x-string"
          }
        }
      }
    }
  },
  "$actions": {},
  "$descriptor": "prototype user.$details",
  "$baseType": "application/json;vnd.sage=syracuse",
  "$baseUrl": "http://ayvdemosyracuse:8124/sdata/syracuse/collaboration/syracuse",
  "$baseHelpUrl": "http://ayvdemosyracuse:8124/help/en-US/syracuse/collaboration/syracuse",
  "$localization": {
    "@AdministrationSectionTitle": "Administration",
    "@ExplorerSectionTitle": "Explorer",
    "@InformationsSectionTitle": "Information",
    "@LocalesSectionTitle": "Custom locales",
    "@LoginSectionTitle": "Login"
  },
  "$article": {
    "$layout": {
      "$items": [
        {
          "$layoutType": "row",
          "$items": [
            {
              "$items": [
                {
                  "$title": "{@LoginSectionTitle}",
                  "$category": "section",
                  "$layout": {
                    "$items": [
                      {
                        "$category": "section",
                        "$layout": {
                          "$items": [
                            {
                              "$bind": "login"
                            },
                            {
                              "$bind": "active"
                            },
                            {
                              "$bind": "authentication"
                            },
                            {
                              "$bind": "oldPassword"
                            },
                            {
                              "$bind": "password"
                            },
                            {
                              "$bind": "changePassword"
                            },
                            {
                              "$bind": "authenticationName"
                            },
                            {
                              "$bind": "ldap"
                            },
                            {
                              "$bind": "oauth2"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "$title": "{@InformationsSectionTitle}",
                  "$category": "section",
                  "$layout": {
                    "$items": [
                      {
                        "$category": "section",
                        "$layout": {
                          "$items": [
                            {
                              "$bind": "title"
                            },
                            {
                              "$bind": "firstName"
                            },
                            {
                              "$bind": "lastName"
                            },
                            {
                              "$bind": "email"
                            },
                            {
                              "$bind": "photo"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            {
              "$items": [
                {
                  "$title": "{@ExplorerSectionTitle}",
                  "$category": "section",
                  "$layout": {
                    "$items": [
                      {
                        "$category": "section",
                        "$layout": {
                          "$items": [
                            {
                              "$bind": "explorer",
                              "$isTitleHidden": true
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            }
          ]
        },
        {
          "$layoutType": "stack",
          "$items": [
            {
              "$title": "{@AdministrationSectionTitle}",
              "$category": "section",
              "$layout": {
                "$items": [
                  {
                    "$category": "section",
                    "$layout": {
                      "$layoutType": "row",
                      "$items": [
                        {
                          "$items": [
                            {
                              "$bind": "groups"
                            },
                            {
                              "$bind": "infov6"
                            },
                            {
                              "$bind": "userv6"
                            },
                            {
                              "$bind": "passwordv6"
                            },
                            {
                              "$bind": "endpoints"
                            }
                          ]
                        },
                        {
                          "$items": [
                            {
                              "$bind": "adminTeams"
                            },
                            {
                              "$bind": "authorTeams"
                            },
                            {
                              "$bind": "memberTeams"
                            }
                          ]
                        }
                      ]
                    }
                  }
                ]
              }
            },
            {
              "$title": "{@LocalesSectionTitle}",
              "$category": "section",
              "$layout": {
                "$items": [
                  {
                    "$category": "section",
                    "$layout": {
                      "$items": [
                        {
                          "$bind": "locales",
                          "$isTitleHidden": true,
                          "$format": "cards",
                          "$layout": {
                            "$items": [
                              {
                                "$category": "section",
                                "$layout": {
                                  "$layoutType": "row",
                                  "$items": [
                                    {
                                      "$layoutType": "stack",
                                      "$items": [
                                        {
                                          "$bind": "code"
                                        },
                                        {
                                          "$bind": "description"
                                        },
                                        {
                                          "$bind": "enabled"
                                        },
                                        {
                                          "$bind": "shortDate"
                                        },
                                        {
                                          "$bind": "shortTime"
                                        },
                                        {
                                          "$bind": "shortDatetime"
                                        }
                                      ]
                                    },
                                    {
                                      "$layoutType": "stack",
                                      "$items": [
                                        {
                                          "$bind": "longDate"
                                        },
                                        {
                                          "$bind": "longTime"
                                        },
                                        {
                                          "$bind": "longDatetime"
                                        },
                                        {
                                          "$bind": "firstDayOfWeek"
                                        }
                                      ]
                                    },
                                    {
                                      "$layoutType": "stack",
                                      "$items": [
                                        {
                                          "$bind": "numberDecimalSeparator"
                                        },
                                        {
                                          "$bind": "numberGroupSeparator"
                                        },
                                        {
                                          "$bind": "numberGroupSize"
                                        }
                                      ]
                                    }
                                  ]
                                }
                              }
                            ]
                          }
                        }
                      ]
                    }
                  }
                ]
              }
            }
          ]
        }
      ]
    }
  }
}