From e876684bcd9041a063de140934e9e7dbe7ba4e8d Mon Sep 17 00:00:00 2001
From: vkovtun <viktor.kovtun@id.ethz.ch>
Date: Mon, 3 Apr 2023 10:29:53 +0200
Subject: [PATCH] SSDM-13256: Fixed the "No value present" exception.

---
 .../helper/AbstractXLSEntityExportHelper.java |  18 ++++++++++++++----
 .../AbstractXLSEntityTypeExportHelper.java    |   5 +++--
 .../helper/AbstractXLSExportHelper.java       |  18 ++++++++++--------
 .../xls/export/DataSetExpectations.java       |   7 +++++--
 .../xls/export/DataSetTypeExpectations.java   |   7 +++++--
 .../xls/export/ExperimentExpectations.java    |   7 +++++--
 .../export/ExperimentTypeExpectations.java    |  10 +++++++---
 .../server/xls/export/SampleExpectations.java |   6 ++++--
 .../xls/export/SampleTypeExpectations.java    |   9 ++++++---
 ...ypeWithBareSamplePropertyExpectations.java |   7 ++++++-
 ...thChainedSamplePropertiesExpectations.java |  12 +++++++++++-
 ...ithCyclicSamplePropertiesExpectations.java |  13 ++++++++++++-
 ...pleTypeWithSamplePropertyExpectations.java |   9 ++++++++-
 ...ypeWithVocabularyPropertyExpectations.java |   7 +++++--
 ...e-type-with-chained-sample-properties.xlsx | Bin 6758 -> 6746 bytes
 ...le-type-with-cyclic-sample-properties.xlsx | Bin 6817 -> 6806 bytes
 16 files changed, 101 insertions(+), 34 deletions(-)

diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityExportHelper.java
index 5b1c71d51a6..66ac519bd44 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityExportHelper.java
@@ -135,7 +135,14 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder
                                 case PROPERTY:
                                 {
                                     return propertyTypes.stream()
-                                            .filter(propertyType -> Objects.equals(propertyType.getCode(), fieldId))
+                                            .filter(propertyType ->
+                                            {
+                                                final String code = propertyType.getCode();
+                                                return fieldId.startsWith(INTERNAL_PROPERTY_PREFIX)
+                                                        ? propertyType.isManagedInternally() &&
+                                                                Objects.equals(code, fieldId.substring(INTERNAL_PROPERTY_PREFIX.length()))
+                                                        : !propertyType.isManagedInternally() && Objects.equals(code, fieldId);
+                                            })
                                             .findFirst()
                                             .orElseThrow(() -> new IllegalArgumentException("Property type not found for id: " + fieldId))
                                             .getLabel();
@@ -165,7 +172,9 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder
                 // Values
                 final Set<Map<String, String>> selectedExportFieldSet = new HashSet<>(selectedExportFields);
                 final Map<String, PropertyType> codeToPropertyTypeMap = propertyTypes.stream()
-                        .collect(Collectors.toMap(PropertyType::getCode, propertyType -> propertyType, (o1, o2) -> o2));
+                        .collect(Collectors.toMap(propertyType -> (propertyType.isManagedInternally() ? INTERNAL_PROPERTY_PREFIX : "")
+                                        + propertyType.getCode(),
+                                propertyType -> propertyType, (o1, o2) -> o2));
                 final List<Map<String, String>> extraExportFields = compatibleWithImport
                         ? Arrays.stream(requiredForImportAttributes)
                         .map(attribute -> Map.of(FIELD_TYPE_KEY, FieldType.ATTRIBUTE.toString(), FIELD_ID_KEY, attribute.toString()))
@@ -180,16 +189,17 @@ public abstract class AbstractXLSEntityExportHelper<ENTITY extends IPermIdHolder
                             .filter(field -> isFieldAcceptable(possibleAttributeNameSet, field))
                             .map(field ->
                             {
+                                final String fieldId = field.get(FIELD_ID_KEY);
                                 switch (FieldType.valueOf(field.get(FIELD_TYPE_KEY)))
                                 {
                                     case ATTRIBUTE:
                                     {
-                                        return getAttributeValue(entity, Attribute.valueOf(field.get(FIELD_ID_KEY)));
+                                        return getAttributeValue(entity, Attribute.valueOf(fieldId));
                                     }
                                     case PROPERTY:
                                     {
                                         return getPropertiesMappingFunction(textFormatting, entity.getProperties())
-                                                .apply(codeToPropertyTypeMap.get(field.get(FIELD_ID_KEY)));
+                                                .apply(codeToPropertyTypeMap.get(fieldId));
                                     }
                                     default:
                                     {
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java
index 1f48b50db07..cd2d633b259 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSEntityTypeExportHelper.java
@@ -187,9 +187,10 @@ public abstract class AbstractXLSEntityTypeExportHelper<ENTITY_TYPE extends IEnt
             final Plugin plugin = propertyAssignment.getPlugin();
             final Vocabulary vocabulary = propertyType.getVocabulary();
 
+            final String code = (propertyType.isManagedInternally() ? INTERNAL_PROPERTY_PREFIX : "") + propertyType.getCode();
             final String[] values = {
-                    String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.PROPERTY_TYPE, null, propertyType.getCode())),
-                    propertyType.getCode(),
+                    String.valueOf(VersionUtils.getStoredVersion(allVersions, ImportTypes.PROPERTY_TYPE, null, code)),
+                    code,
                     String.valueOf(propertyAssignment.isMandatory()).toUpperCase(),
                     String.valueOf(propertyAssignment.isShowInEditView()).toUpperCase(),
                     propertyAssignment.getSection(),
diff --git a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java
index 804f7eaaca3..678a9449402 100644
--- a/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java
+++ b/server-application-server/source/java/ch/ethz/sis/openbis/generic/server/xls/export/helper/AbstractXLSExportHelper.java
@@ -17,9 +17,7 @@ package ch.ethz.sis.openbis.generic.server.xls.export.helper;
 
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.function.Function;
@@ -37,11 +35,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.common.interfaces.IEntityType;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.plugin.Plugin;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.DataType;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyAssignment;
 import ch.ethz.sis.openbis.generic.asapi.v3.dto.property.PropertyType;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.Vocabulary;
 import ch.ethz.sis.openbis.generic.server.xls.export.Attribute;
 import ch.ethz.sis.openbis.generic.server.xls.export.ExportableKind;
 import ch.ethz.sis.openbis.generic.server.xls.export.FieldType;
@@ -61,6 +56,8 @@ public abstract class AbstractXLSExportHelper<ENTITY_TYPE extends IEntityType> i
 
     public static final String FIELD_ID_KEY = "id";
 
+    protected static final String INTERNAL_PROPERTY_PREFIX = "$";
+
     final Workbook wb;
     
     final CellStyle normalCellStyle;
@@ -167,11 +164,16 @@ public abstract class AbstractXLSExportHelper<ENTITY_TYPE extends IEntityType> i
     {
         return textFormatting == XLSExport.TextFormatting.PLAIN
                 ? propertyType -> propertyType.getDataType() == DataType.MULTILINE_VARCHAR
-                        ? properties.get(propertyType.getCode()) != null
+                        ? getProperty(properties, propertyType) != null
                                 ? properties.get(propertyType.getCode()).replaceAll("<[^>]+>", "")
                                 : null
-                        : properties.get(propertyType.getCode())
-                : propertyType -> properties.get(propertyType.getCode());
+                        : getProperty(properties, propertyType)
+                : propertyType -> getProperty(properties, propertyType);
+    }
+
+    private static String getProperty(final Map<String, String> properties, final PropertyType propertyType)
+    {
+        return properties.get((propertyType.isManagedInternally() ? INTERNAL_PROPERTY_PREFIX : "") + propertyType.getCode());
     }
 
 }
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetExpectations.java
index 22cd36e81f7..20a0098b8c2 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetExpectations.java
@@ -204,10 +204,11 @@ class DataSetExpectations extends Expectations
             private PropertyAssignment getNamePropertyAssignment()
             {
                 final PropertyType propertyType = new PropertyType();
-                propertyType.setCode("$NAME");
+                propertyType.setCode("NAME");
                 propertyType.setLabel("Name");
                 propertyType.setDescription("Name");
                 propertyType.setDataType(DataType.VARCHAR);
+                propertyType.setManagedInternally(true);
 
                 final PropertyAssignment propertyAssignment = new PropertyAssignment();
                 propertyAssignment.setFetchOptions(getPropertyAssignmentFetchOptions());
@@ -222,10 +223,11 @@ class DataSetExpectations extends Expectations
             private PropertyAssignment getAttachmentPropertyAssignment()
             {
                 final PropertyType propertyType = new PropertyType();
-                propertyType.setCode("$ATTACHMENT");
+                propertyType.setCode("ATTACHMENT");
                 propertyType.setLabel("Attachment");
                 propertyType.setDescription("Attachment");
                 propertyType.setDataType(DataType.VARCHAR);
+                propertyType.setManagedInternally(true);
 
                 final PropertyAssignment propertyAssignment = new PropertyAssignment();
                 propertyAssignment.setFetchOptions(getPropertyAssignmentFetchOptions());
@@ -244,6 +246,7 @@ class DataSetExpectations extends Expectations
                 propertyType.setLabel("Notes");
                 propertyType.setDescription("Notes");
                 propertyType.setDataType(DataType.MULTILINE_VARCHAR);
+                propertyType.setManagedInternally(false);
 
                 final PropertyAssignment propertyAssignment = new PropertyAssignment();
                 propertyAssignment.setFetchOptions(getPropertyAssignmentFetchOptions());
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetTypeExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetTypeExpectations.java
index a4c21b94aca..f02c6824650 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetTypeExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/DataSetTypeExpectations.java
@@ -82,10 +82,11 @@ class DataSetTypeExpectations extends Expectations
 
                 propertyAssignments[0] = PropertyAssignmentFactory.createPropertyAssignment(
                         propertyAssignmentFetchOptions);
-                propertyAssignments[0].getPropertyType().setCode("$NAME");
+                propertyAssignments[0].getPropertyType().setCode("NAME");
                 propertyAssignments[0].setMandatory(false);
                 propertyAssignments[0].setShowInEditView(true);
                 propertyAssignments[0].setSection("General info");
+                propertyAssignments[0].getPropertyType().setManagedInternally(true);
                 propertyAssignments[0].getPropertyType().setLabel("Name");
                 propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
                 propertyAssignments[0].getPropertyType().setDescription("Name");
@@ -96,6 +97,7 @@ class DataSetTypeExpectations extends Expectations
                 propertyAssignments[1].setMandatory(false);
                 propertyAssignments[1].setShowInEditView(true);
                 propertyAssignments[1].setSection("Comments");
+                propertyAssignments[1].getPropertyType().setManagedInternally(false);
                 propertyAssignments[1].getPropertyType().setLabel("Notes");
                 propertyAssignments[1].getPropertyType().setDataType(DataType.MULTILINE_VARCHAR);
                 propertyAssignments[1].getPropertyType().setDescription("Notes");
@@ -104,9 +106,10 @@ class DataSetTypeExpectations extends Expectations
 
                 propertyAssignments[2] = PropertyAssignmentFactory.createPropertyAssignment(
                         propertyAssignmentFetchOptions);
-                propertyAssignments[2].getPropertyType().setCode("$XMLCOMMENTS");
+                propertyAssignments[2].getPropertyType().setCode("XMLCOMMENTS");
                 propertyAssignments[2].setMandatory(false);
                 propertyAssignments[2].setShowInEditView(false);
+                propertyAssignments[2].getPropertyType().setManagedInternally(true);
                 propertyAssignments[2].getPropertyType().setLabel("Comments List");
                 propertyAssignments[2].getPropertyType().setDataType(DataType.XML);
                 propertyAssignments[2].getPropertyType().setDescription("Comments log");
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/ExperimentExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/ExperimentExpectations.java
index 51fd0434b65..cd1090372ec 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/ExperimentExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/ExperimentExpectations.java
@@ -198,10 +198,11 @@ class ExperimentExpectations extends Expectations
             private PropertyAssignment getNamePropertyAssignment()
             {
                 final PropertyType propertyType = new PropertyType();
-                propertyType.setCode("$NAME");
+                propertyType.setCode("NAME");
                 propertyType.setLabel("Name");
                 propertyType.setDescription("Name");
                 propertyType.setDataType(DataType.VARCHAR);
+                propertyType.setManagedInternally(true);
 
                 final PropertyAssignment propertyAssignment = new PropertyAssignment();
                 propertyAssignment.setFetchOptions(getPropertyAssignmentFetchOptions());
@@ -216,10 +217,11 @@ class ExperimentExpectations extends Expectations
             private PropertyAssignment getDefaultObjectTypePropertyAssignment()
             {
                 final PropertyType propertyType = new PropertyType();
-                propertyType.setCode("$DEFAULT_OBJECT_TYPE");
+                propertyType.setCode("DEFAULT_OBJECT_TYPE");
                 propertyType.setLabel("Default object type");
                 propertyType.setDescription("Enter the code of the object type for which the collection is used");
                 propertyType.setDataType(DataType.VARCHAR);
+                propertyType.setManagedInternally(true);
 
                 final PropertyAssignment propertyAssignment = new PropertyAssignment();
                 propertyAssignment.setFetchOptions(getPropertyAssignmentFetchOptions());
@@ -238,6 +240,7 @@ class ExperimentExpectations extends Expectations
                 propertyType.setLabel("Experiment completed");
                 propertyType.setDescription("Marks the experiment as finished");
                 propertyType.setDataType(DataType.BOOLEAN);
+                propertyType.setManagedInternally(false);
 
                 final PropertyAssignment propertyAssignment = new PropertyAssignment();
                 propertyAssignment.setFetchOptions(getPropertyAssignmentFetchOptions());
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/ExperimentTypeExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/ExperimentTypeExpectations.java
index 09f4a190b81..3e6d20ae6a6 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/ExperimentTypeExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/ExperimentTypeExpectations.java
@@ -86,20 +86,22 @@ class ExperimentTypeExpectations extends Expectations
 
                 propertyAssignments[0] = PropertyAssignmentFactory.createPropertyAssignment(
                         fetchOptions.withPropertyAssignments());
-                propertyAssignments[0].getPropertyType().setCode("$NAME");
+                propertyAssignments[0].getPropertyType().setCode("NAME");
                 propertyAssignments[0].setMandatory(false);
                 propertyAssignments[0].setShowInEditView(true);
                 propertyAssignments[0].setSection("General info");
+                propertyAssignments[0].getPropertyType().setManagedInternally(true);
                 propertyAssignments[0].getPropertyType().setLabel("Name");
                 propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
                 propertyAssignments[0].getPropertyType().setDescription("Name");
 
                 propertyAssignments[1] = PropertyAssignmentFactory.createPropertyAssignment(
                         fetchOptions.withPropertyAssignments());
-                propertyAssignments[1].getPropertyType().setCode("$DEFAULT_OBJECT_TYPE");
+                propertyAssignments[1].getPropertyType().setCode("DEFAULT_OBJECT_TYPE");
                 propertyAssignments[1].setMandatory(false);
                 propertyAssignments[1].setShowInEditView(true);
                 propertyAssignments[1].setSection("General info");
+                propertyAssignments[1].getPropertyType().setManagedInternally(true);
                 propertyAssignments[1].getPropertyType().setLabel("Default object type");
                 propertyAssignments[1].getPropertyType().setDataType(DataType.VARCHAR);
                 propertyAssignments[1].getPropertyType().setDescription(
@@ -110,6 +112,7 @@ class ExperimentTypeExpectations extends Expectations
                 propertyAssignments[2].getPropertyType().setCode("NOTES");
                 propertyAssignments[2].setMandatory(false);
                 propertyAssignments[2].setShowInEditView(true);
+                propertyAssignments[2].getPropertyType().setManagedInternally(false);
                 propertyAssignments[2].getPropertyType().setLabel("Notes");
                 propertyAssignments[2].getPropertyType().setDataType(DataType.MULTILINE_VARCHAR);
                 propertyAssignments[2].getPropertyType().setDescription("Notes");
@@ -118,9 +121,10 @@ class ExperimentTypeExpectations extends Expectations
 
                 propertyAssignments[3] = PropertyAssignmentFactory.createPropertyAssignment(
                         fetchOptions.withPropertyAssignments());
-                propertyAssignments[3].getPropertyType().setCode("$XMLCOMMENTS");
+                propertyAssignments[3].getPropertyType().setCode("XMLCOMMENTS");
                 propertyAssignments[3].setMandatory(false);
                 propertyAssignments[3].setShowInEditView(false);
+                propertyAssignments[3].getPropertyType().setManagedInternally(true);
                 propertyAssignments[3].getPropertyType().setLabel("Comments List");
                 propertyAssignments[3].getPropertyType().setDataType(DataType.XML);
                 propertyAssignments[3].getPropertyType().setDescription("Comments log");
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleExpectations.java
index 882d3b87e66..d0f2ba1b89b 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleExpectations.java
@@ -219,10 +219,11 @@ class SampleExpectations extends Expectations
             private PropertyAssignment getBoxesCountPropertyAssignment()
             {
                 final PropertyType propertyType = new PropertyType();
-                propertyType.setCode("$STORAGE.BOX_NUM");
+                propertyType.setCode("STORAGE.BOX_NUM");
                 propertyType.setLabel("Number of Boxes");
                 propertyType.setDescription("Number of Boxes");
                 propertyType.setDataType(DataType.INTEGER);
+                propertyType.setManagedInternally(true);
 
                 final PropertyAssignment propertyAssignment = new PropertyAssignment();
                 propertyAssignment.setFetchOptions(getPropertyAssignmentFetchOptions());
@@ -237,10 +238,11 @@ class SampleExpectations extends Expectations
             private PropertyAssignment getNamePropertyAssignment()
             {
                 final PropertyType propertyType = new PropertyType();
-                propertyType.setCode("$NAME");
+                propertyType.setCode("NAME");
                 propertyType.setLabel("Name");
                 propertyType.setDescription("Name");
                 propertyType.setDataType(DataType.VARCHAR);
+                propertyType.setManagedInternally(true);
 
                 final PropertyAssignment propertyAssignment = new PropertyAssignment();
                 propertyAssignment.setFetchOptions(getPropertyAssignmentFetchOptions());
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeExpectations.java
index 8fb3e83d7af..5da30a0232b 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeExpectations.java
@@ -100,20 +100,22 @@ class SampleTypeExpectations extends Expectations
 
                 propertyAssignments[0] = PropertyAssignmentFactory.createPropertyAssignment(
                         fetchOptions.withPropertyAssignments());
-                propertyAssignments[0].getPropertyType().setCode("$NAME");
+                propertyAssignments[0].getPropertyType().setCode("NAME");
                 propertyAssignments[0].setMandatory(false);
                 propertyAssignments[0].setShowInEditView(true);
                 propertyAssignments[0].setSection("General info");
+                propertyAssignments[0].getPropertyType().setManagedInternally(true);
                 propertyAssignments[0].getPropertyType().setLabel("Name");
                 propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
                 propertyAssignments[0].getPropertyType().setDescription("Name");
 
                 propertyAssignments[1] = PropertyAssignmentFactory.createPropertyAssignment(
                         fetchOptions.withPropertyAssignments());
-                propertyAssignments[1].getPropertyType().setCode("$DOCUMENT");
+                propertyAssignments[1].getPropertyType().setCode("DOCUMENT");
                 propertyAssignments[1].setMandatory(false);
                 propertyAssignments[1].setShowInEditView(true);
                 propertyAssignments[1].setSection("General info");
+                propertyAssignments[1].getPropertyType().setManagedInternally(true);
                 propertyAssignments[1].getPropertyType().setLabel("Document");
                 propertyAssignments[1].getPropertyType().setDataType(DataType.MULTILINE_VARCHAR);
                 propertyAssignments[1].getPropertyType().setDescription("Document");
@@ -122,9 +124,10 @@ class SampleTypeExpectations extends Expectations
 
                 propertyAssignments[2] = PropertyAssignmentFactory.createPropertyAssignment(
                         fetchOptions.withPropertyAssignments());
-                propertyAssignments[2].getPropertyType().setCode("$ANNOTATIONS_STATE");
+                propertyAssignments[2].getPropertyType().setCode("ANNOTATIONS_STATE");
                 propertyAssignments[2].setMandatory(false);
                 propertyAssignments[2].setShowInEditView(false);
+                propertyAssignments[2].getPropertyType().setManagedInternally(true);
                 propertyAssignments[2].getPropertyType().setLabel("Annotations State");
                 propertyAssignments[2].getPropertyType().setDataType(DataType.XML);
                 propertyAssignments[2].getPropertyType().setDescription("Annotations State");
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithBareSamplePropertyExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithBareSamplePropertyExpectations.java
index 820d75963cd..b83874fe903 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithBareSamplePropertyExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithBareSamplePropertyExpectations.java
@@ -100,10 +100,11 @@ class SampleTypeWithBareSamplePropertyExpectations extends Expectations
 
         propertyAssignments[0] = PropertyAssignmentFactory.createPropertyAssignment(
                 fetchOptions.withPropertyAssignments());
-        propertyAssignments[0].getPropertyType().setCode("$NAME");
+        propertyAssignments[0].getPropertyType().setCode("NAME");
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(true);
         propertyAssignments[0].getPropertyType().setLabel("Name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("Name");
@@ -114,6 +115,7 @@ class SampleTypeWithBareSamplePropertyExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Open");
         propertyAssignments[1].getPropertyType().setDataType(DataType.BOOLEAN);
         propertyAssignments[1].getPropertyType().setDescription("Marks the program open for assignment");
@@ -125,6 +127,7 @@ class SampleTypeWithBareSamplePropertyExpectations extends Expectations
         propertyAssignments[2].setMandatory(true);
         propertyAssignments[2].setShowInEditView(true);
         propertyAssignments[2].setSection("General info");
+        propertyAssignments[2].getPropertyType().setManagedInternally(false);
         propertyAssignments[2].getPropertyType().setLabel("Start date");
         propertyAssignments[2].getPropertyType().setDataType(DataType.TIMESTAMP);
         propertyAssignments[2].getPropertyType().setDescription("Start date");
@@ -135,6 +138,7 @@ class SampleTypeWithBareSamplePropertyExpectations extends Expectations
         propertyAssignments[3].setMandatory(true);
         propertyAssignments[3].setShowInEditView(true);
         propertyAssignments[3].setSection("General info");
+        propertyAssignments[3].getPropertyType().setManagedInternally(false);
         propertyAssignments[3].getPropertyType().setLabel("End date");
         propertyAssignments[3].getPropertyType().setDataType(DataType.TIMESTAMP);
         propertyAssignments[3].getPropertyType().setDescription("End date");
@@ -145,6 +149,7 @@ class SampleTypeWithBareSamplePropertyExpectations extends Expectations
         propertyAssignments[4].setMandatory(false);
         propertyAssignments[4].setShowInEditView(true);
         propertyAssignments[4].setSection("General info");
+        propertyAssignments[4].getPropertyType().setManagedInternally(false);
         propertyAssignments[4].getPropertyType().setLabel("Teacher");
         propertyAssignments[4].getPropertyType().setDataType(DataType.SAMPLE);
         propertyAssignments[4].getPropertyType().setDescription("Teacher");
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithChainedSamplePropertiesExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithChainedSamplePropertiesExpectations.java
index 32789bee5aa..8b1ad81ccb3 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithChainedSamplePropertiesExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithChainedSamplePropertiesExpectations.java
@@ -144,6 +144,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(true);
         propertyAssignments[0].getPropertyType().setLabel("Name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("Name");
@@ -153,6 +154,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Address");
         propertyAssignments[1].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[1].getPropertyType().setDescription("Address");
@@ -170,6 +172,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(false);
         propertyAssignments[0].getPropertyType().setLabel("First name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("First name");
@@ -179,6 +182,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Last name");
         propertyAssignments[1].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[1].getPropertyType().setDescription("Last name");
@@ -188,6 +192,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[2].setMandatory(false);
         propertyAssignments[2].setShowInEditView(true);
         propertyAssignments[2].setSection("General info");
+        propertyAssignments[2].getPropertyType().setManagedInternally(false);
         propertyAssignments[2].getPropertyType().setLabel("Department");
         propertyAssignments[2].getPropertyType().setDataType(DataType.SAMPLE);
         final SampleType sampleType = new SampleType();
@@ -207,10 +212,11 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         final PropertyAssignment[] propertyAssignments = new PropertyAssignment[5];
 
         propertyAssignments[0] = PropertyAssignmentFactory.createPropertyAssignment(propertyAssignmentFetchOptions);
-        propertyAssignments[0].getPropertyType().setCode("$NAME");
+        propertyAssignments[0].getPropertyType().setCode("NAME");
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(true);
         propertyAssignments[0].getPropertyType().setLabel("Name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("Name");
@@ -220,6 +226,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Open");
         propertyAssignments[1].getPropertyType().setDataType(DataType.BOOLEAN);
         propertyAssignments[1].getPropertyType().setDescription("Marks the program open for assignment");
@@ -229,6 +236,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[2].setMandatory(true);
         propertyAssignments[2].setShowInEditView(true);
         propertyAssignments[2].setSection("General info");
+        propertyAssignments[2].getPropertyType().setManagedInternally(false);
         propertyAssignments[2].getPropertyType().setLabel("Start date");
         propertyAssignments[2].getPropertyType().setDataType(DataType.TIMESTAMP);
         propertyAssignments[2].getPropertyType().setDescription("Start date");
@@ -238,6 +246,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[3].setMandatory(true);
         propertyAssignments[3].setShowInEditView(true);
         propertyAssignments[3].setSection("General info");
+        propertyAssignments[3].getPropertyType().setManagedInternally(false);
         propertyAssignments[3].getPropertyType().setLabel("End date");
         propertyAssignments[3].getPropertyType().setDataType(DataType.TIMESTAMP);
         propertyAssignments[3].getPropertyType().setDescription("End date");
@@ -247,6 +256,7 @@ class SampleTypeWithChainedSamplePropertiesExpectations extends Expectations
         propertyAssignments[4].setMandatory(false);
         propertyAssignments[4].setShowInEditView(true);
         propertyAssignments[4].setSection("General info");
+        propertyAssignments[4].getPropertyType().setManagedInternally(false);
         propertyAssignments[4].getPropertyType().setLabel("Teacher");
         propertyAssignments[4].getPropertyType().setDataType(DataType.SAMPLE);
         final SampleType sampleType = new SampleType();
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithCyclicSamplePropertiesExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithCyclicSamplePropertiesExpectations.java
index 2133fd350ff..ce59a4b7252 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithCyclicSamplePropertiesExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithCyclicSamplePropertiesExpectations.java
@@ -143,6 +143,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(true);
         propertyAssignments[0].getPropertyType().setLabel("Name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("Name");
@@ -152,6 +153,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Address");
         propertyAssignments[1].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[1].getPropertyType().setDescription("Address");
@@ -161,6 +163,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[2].setMandatory(true);
         propertyAssignments[2].setShowInEditView(true);
         propertyAssignments[2].setSection("General info");
+        propertyAssignments[2].getPropertyType().setManagedInternally(false);
         propertyAssignments[2].getPropertyType().setLabel("Course");
         propertyAssignments[2].getPropertyType().setDataType(DataType.SAMPLE);
         final SampleType sampleType = new SampleType();
@@ -181,6 +184,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(false);
         propertyAssignments[0].getPropertyType().setLabel("First name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("First name");
@@ -190,6 +194,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Last name");
         propertyAssignments[1].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[1].getPropertyType().setDescription("Last name");
@@ -199,6 +204,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[2].setMandatory(false);
         propertyAssignments[2].setShowInEditView(true);
         propertyAssignments[2].setSection("General info");
+        propertyAssignments[2].getPropertyType().setManagedInternally(false);
         propertyAssignments[2].getPropertyType().setLabel("Department");
         propertyAssignments[2].getPropertyType().setDataType(DataType.SAMPLE);
         final SampleType sampleType = new SampleType();
@@ -217,10 +223,11 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         final PropertyAssignment[] propertyAssignments = new PropertyAssignment[5];
 
         propertyAssignments[0] = PropertyAssignmentFactory.createPropertyAssignment(propertyAssignmentFetchOptions);
-        propertyAssignments[0].getPropertyType().setCode("$NAME");
+        propertyAssignments[0].getPropertyType().setCode("NAME");
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(true);
         propertyAssignments[0].getPropertyType().setLabel("Name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("Name");
@@ -230,6 +237,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Open");
         propertyAssignments[1].getPropertyType().setDataType(DataType.BOOLEAN);
         propertyAssignments[1].getPropertyType().setDescription("Marks the program open for assignment");
@@ -239,6 +247,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[2].setMandatory(true);
         propertyAssignments[2].setShowInEditView(true);
         propertyAssignments[2].setSection("General info");
+        propertyAssignments[2].getPropertyType().setManagedInternally(false);
         propertyAssignments[2].getPropertyType().setLabel("Start date");
         propertyAssignments[2].getPropertyType().setDataType(DataType.TIMESTAMP);
         propertyAssignments[2].getPropertyType().setDescription("Start date");
@@ -248,6 +257,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[3].setMandatory(true);
         propertyAssignments[3].setShowInEditView(true);
         propertyAssignments[3].setSection("General info");
+        propertyAssignments[3].getPropertyType().setManagedInternally(false);
         propertyAssignments[3].getPropertyType().setLabel("End date");
         propertyAssignments[3].getPropertyType().setDataType(DataType.TIMESTAMP);
         propertyAssignments[3].getPropertyType().setDescription("End date");
@@ -257,6 +267,7 @@ class SampleTypeWithCyclicSamplePropertiesExpectations extends Expectations
         propertyAssignments[4].setMandatory(false);
         propertyAssignments[4].setShowInEditView(true);
         propertyAssignments[4].setSection("General info");
+        propertyAssignments[4].getPropertyType().setManagedInternally(false);
         propertyAssignments[4].getPropertyType().setLabel("Teacher");
         propertyAssignments[4].getPropertyType().setDataType(DataType.SAMPLE);
         final SampleType sampleType = new SampleType();
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithSamplePropertyExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithSamplePropertyExpectations.java
index f04bb060cb1..366335c732a 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithSamplePropertyExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithSamplePropertyExpectations.java
@@ -139,6 +139,7 @@ class SampleTypeWithSamplePropertyExpectations extends Expectations
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(false);
         propertyAssignments[0].getPropertyType().setLabel("First name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("First name");
@@ -149,6 +150,7 @@ class SampleTypeWithSamplePropertyExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Last name");
         propertyAssignments[1].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[1].getPropertyType().setDescription("Last name");
@@ -169,10 +171,11 @@ class SampleTypeWithSamplePropertyExpectations extends Expectations
 
         propertyAssignments[0] = PropertyAssignmentFactory.createPropertyAssignment(
                 fetchOptions.withPropertyAssignments());
-        propertyAssignments[0].getPropertyType().setCode("$NAME");
+        propertyAssignments[0].getPropertyType().setCode("NAME");
         propertyAssignments[0].setMandatory(true);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(true);
         propertyAssignments[0].getPropertyType().setLabel("Name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("Name");
@@ -183,6 +186,7 @@ class SampleTypeWithSamplePropertyExpectations extends Expectations
         propertyAssignments[1].setMandatory(true);
         propertyAssignments[1].setShowInEditView(true);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(false);
         propertyAssignments[1].getPropertyType().setLabel("Open");
         propertyAssignments[1].getPropertyType().setDataType(DataType.BOOLEAN);
         propertyAssignments[1].getPropertyType().setDescription("Marks the program open for assignment");
@@ -194,6 +198,7 @@ class SampleTypeWithSamplePropertyExpectations extends Expectations
         propertyAssignments[2].setMandatory(true);
         propertyAssignments[2].setShowInEditView(true);
         propertyAssignments[2].setSection("General info");
+        propertyAssignments[2].getPropertyType().setManagedInternally(false);
         propertyAssignments[2].getPropertyType().setLabel("Start date");
         propertyAssignments[2].getPropertyType().setDataType(DataType.TIMESTAMP);
         propertyAssignments[2].getPropertyType().setDescription("Start date");
@@ -204,6 +209,7 @@ class SampleTypeWithSamplePropertyExpectations extends Expectations
         propertyAssignments[3].setMandatory(true);
         propertyAssignments[3].setShowInEditView(true);
         propertyAssignments[3].setSection("General info");
+        propertyAssignments[3].getPropertyType().setManagedInternally(false);
         propertyAssignments[3].getPropertyType().setLabel("End date");
         propertyAssignments[3].getPropertyType().setDataType(DataType.TIMESTAMP);
         propertyAssignments[3].getPropertyType().setDescription("End date");
@@ -214,6 +220,7 @@ class SampleTypeWithSamplePropertyExpectations extends Expectations
         propertyAssignments[4].setMandatory(false);
         propertyAssignments[4].setShowInEditView(true);
         propertyAssignments[4].setSection("General info");
+        propertyAssignments[4].getPropertyType().setManagedInternally(false);
         propertyAssignments[4].getPropertyType().setLabel("Teacher");
         propertyAssignments[4].getPropertyType().setDataType(DataType.SAMPLE);
         final SampleType sampleType = new SampleType();
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithVocabularyPropertyExpectations.java b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithVocabularyPropertyExpectations.java
index f9114f9ef6b..3eb95e9a342 100644
--- a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithVocabularyPropertyExpectations.java
+++ b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/SampleTypeWithVocabularyPropertyExpectations.java
@@ -179,20 +179,22 @@ class SampleTypeWithVocabularyPropertyExpectations extends Expectations
 
         propertyAssignments[0] = PropertyAssignmentFactory.createPropertyAssignment(
                 fetchOptions.withPropertyAssignments());
-        propertyAssignments[0].getPropertyType().setCode("$NAME");
+        propertyAssignments[0].getPropertyType().setCode("NAME");
         propertyAssignments[0].setMandatory(false);
         propertyAssignments[0].setShowInEditView(true);
         propertyAssignments[0].setSection("General info");
+        propertyAssignments[0].getPropertyType().setManagedInternally(true);
         propertyAssignments[0].getPropertyType().setLabel("Name");
         propertyAssignments[0].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[0].getPropertyType().setDescription("Name");
 
         propertyAssignments[1] = PropertyAssignmentFactory.createPropertyAssignment(
                 fetchOptions.withPropertyAssignments());
-        propertyAssignments[1].getPropertyType().setCode("$BARCODE");
+        propertyAssignments[1].getPropertyType().setCode("BARCODE");
         propertyAssignments[1].setMandatory(false);
         propertyAssignments[1].setShowInEditView(false);
         propertyAssignments[1].setSection("General info");
+        propertyAssignments[1].getPropertyType().setManagedInternally(true);
         propertyAssignments[1].getPropertyType().setLabel("Custom Barcode");
         propertyAssignments[1].getPropertyType().setDataType(DataType.VARCHAR);
         propertyAssignments[1].getPropertyType().setDescription("Custom Barcode");
@@ -203,6 +205,7 @@ class SampleTypeWithVocabularyPropertyExpectations extends Expectations
         propertyAssignments[2].setMandatory(false);
         propertyAssignments[2].setShowInEditView(true);
         propertyAssignments[2].setSection("General info");
+        propertyAssignments[2].getPropertyType().setManagedInternally(false);
         propertyAssignments[2].getPropertyType().setLabel("Antibody host");
         propertyAssignments[2].getPropertyType().setDataType(DataType.CONTROLLEDVOCABULARY);
         final Vocabulary vocabulary = new Vocabulary();
diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/resources/export-sample-type-with-chained-sample-properties.xlsx b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/resources/export-sample-type-with-chained-sample-properties.xlsx
index 755c51dc26e8712e6945501a60fdaa3966cffd97..56d8359974934e87053beee3b962f312a8d32cc0 100644
GIT binary patch
delta 4140
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
O8>7T7NZP~to8vzw)opD6

delta 4184
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
JJj(Q&`5%i=Y=Qs)

diff --git a/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/resources/export-sample-type-with-cyclic-sample-properties.xlsx b/server-application-server/sourceTest/java/ch/ethz/sis/openbis/generic/server/xls/export/resources/export-sample-type-with-cyclic-sample-properties.xlsx
index 6d49c3efd75c1628a586ca8b5df2ac3ef96fa92f..3de0cb40e840ca239231956fd7f1b3991e4d6d54 100644
GIT binary patch
delta 4443
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

delta 4510
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
OjkKrZz$UnN<^KR1OELWb

-- 
GitLab