Investigation
[Bug #601540 Failed to import workspace
containing my open activities using a different
user.]
Reproduction Steps Used
Go to feature management – enable feature: “Saved views”.
Have two users who are system administrators.
Test 1:
Export the workspace containing “My open activities” tile, import the workspace using a different user in
same environment
1. Create a workspace (Go to default dashboard, right click, personalize, add a workspace)
2. Go to Common > Activities > My open activities. Options > Add to workspace
Workspace: select the workspace created in #1; Presentation: Tile
Click configure > Name on tile: My open activities > Click OK
3. Open the workspace, right click > Personalize > Personalize this page > click on … > Export.
4. Login using a different user > go to default dashboard right click, personalize > Personalize this
page > click on … > Import.
Browse > select the workspace exported in #3 > Click Import
[Test result]:
It shows warning “The property PinnedElement_Myopenactivities_TILE is not valid.” and nothing is
imported.
Test 2:
Export the workspace containing “My open activities” tile, import the workspace using same user in
different environment
[Test result]:
It works fine, workspace could be imported and the tile “My open activities” can show in the workspace
Test 3:
Export the workspace containing “My open activities” tile, import the workspace using a different user
in different environment
[Test result]:
It shows warning “The property PinnedElement_Myopenactivities_TILE is not valid.” and nothing is
imported.
Actual Result
Export the workspace containing “My open activities” tile, import the workspace using a different user,
it shows warning “The property PinnedElement_Myopenactivities_TILE is not valid.” and nothing is
imported.
Expected Result
Workspace should be imported without issue.
Root Cause Details
1. When importing the workspace using different user in same environment
Since the current user does not have active employment in current company, so the querystring
obtained has ResponsibleWorker == 0.
Target Query (Obtained from importing the workspace)
{Query smmActivities_MyOpen object e290d0: SELECT FIRSTFAST FORUPDATE * FROM
smmActivities(smmActivities) USING INDEX ActivityNumberIdx ORDER BY smmActivities.StartDateTime
ASC, smmActivities.TaskPriority ASC WHERE ((IsTemplate = 0)) AND ((((ResponsibleWorker ==
HcmWorkerLookup::currentWorker()) && (ResponsibleWorker != 0)))) AND ((Closed = 0)) AND
((((ResponsibleWorker == 22565420991) || ((ResponsibleWorker != 22565420991) && (Sensitivity !=
2))))) OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_ResponsibleWorker)
ON smmActivities.ResponsibleWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_ResponsibleWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_DoneByWorker) ON
smmActivities.DoneByWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_DoneByWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
NOTEXISTS JOIN FORUPDATE * FROM HierarchyTreeTable(HierarchyTreeTable_1) WHERE
smmActivities.RecId = HierarchyTreeTable.RefRecId AND ((ElementNodeType = 0))}
Merge Query (Obtained from the simulateActualFormQuery)
{Query smmActivities_MyOpen object e29320: SELECT FIRSTFAST FORUPDATE * FROM
smmActivities(smmActivities) USING INDEX ActivityNumberIdx ORDER BY smmActivities.StartDateTime
ASC, smmActivities.TaskPriority ASC WHERE ((IsTemplate = 0)) AND ((((ResponsibleWorker ==
HcmWorkerLookup::currentWorker()) && (ResponsibleWorker != 0)))) AND ((Closed = 0)) AND
((((ResponsibleWorker == 0) || ((ResponsibleWorker != 0) && (Sensitivity != 2))))) OUTER JOIN
FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_ResponsibleWorker) ON
smmActivities.ResponsibleWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_ResponsibleWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_DoneByWorker) ON
smmActivities.DoneByWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_DoneByWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
NOTEXISTS JOIN FORUPDATE * FROM HierarchyTreeTable(HierarchyTreeTable_1) WHERE
smmActivities.RecId = HierarchyTreeTable.RefRecId AND ((ElementNodeType = 0))}
isValidMergeRange() returns false since the if conditions here fails because the range values of merge
and target query are different.
Hence propertyValidated is evaluated to false thus the import of workspace fails, and the error is
thrown from here.
Even if the other user has active employment in current company, the isCompatibleQueryMerge() of
class xSysQuery returns false because of ResponsibleWorker range value mismatch.
2. When importing the workspace with same user in different environment.
The targetQuery and MergeQuery remains same, so isCompatibleQueryMerge() returns true.
{Query smmActivities_MyOpen object 894a4cd0: SELECT FIRSTFAST FORUPDATE * FROM
smmActivities(smmActivities) USING INDEX ActivityNumberIdx ORDER BY smmActivities.StartDateTime
ASC, smmActivities.TaskPriority ASC WHERE ((IsTemplate = 0)) AND ((((ResponsibleWorker ==
HcmWorkerLookup::currentWorker()) && (ResponsibleWorker != 0)))) AND ((Closed = 0)) AND
((((ResponsibleWorker == 22565420991) || ((ResponsibleWorker != 22565420991) && (Sensitivity !=
2))))) OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_ResponsibleWorker)
ON smmActivities.ResponsibleWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_ResponsibleWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_DoneByWorker) ON
smmActivities.DoneByWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_DoneByWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
NOTEXISTS JOIN FORUPDATE * FROM HierarchyTreeTable(HierarchyTreeTable_1) WHERE
smmActivities.RecId = HierarchyTreeTable.RefRecId AND ((ElementNodeType = 0))}
And the propertyValidated is true thus the import of workspace is successful.
3. When importing the workspace with different user in different environment.
Target Query (Obtained from importing the workspace)
{Query smmActivities_MyOpen object 80335680: SELECT FIRSTFAST FORUPDATE * FROM
smmActivities(smmActivities) USING INDEX ActivityNumberIdx ORDER BY smmActivities.StartDateTime
ASC, smmActivities.TaskPriority ASC WHERE ((IsTemplate = 0)) AND ((((ResponsibleWorker ==
HcmWorkerLookup::currentWorker()) && (ResponsibleWorker != 0)))) AND ((Closed = 0)) AND
((((ResponsibleWorker == 22565420991) || ((ResponsibleWorker != 22565420991) && (Sensitivity !=
2))))) OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_ResponsibleWorker)
ON smmActivities.ResponsibleWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_ResponsibleWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_DoneByWorker) ON
smmActivities.DoneByWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_DoneByWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
NOTEXISTS JOIN FORUPDATE * FROM HierarchyTreeTable(HierarchyTreeTable_1) WHERE
smmActivities.RecId = HierarchyTreeTable.RefRecId AND ((ElementNodeType = 0))}
Merge Query (Obtained from the simulateActualFormQuery)
{Query smmActivities_MyOpen object 80334af0: SELECT FIRSTFAST FORUPDATE * FROM
smmActivities(smmActivities) USING INDEX ActivityNumberIdx ORDER BY smmActivities.StartDateTime
ASC, smmActivities.TaskPriority ASC WHERE ((IsTemplate = 0)) AND ((((ResponsibleWorker ==
HcmWorkerLookup::currentWorker()) && (ResponsibleWorker != 0)))) AND ((Closed = 0)) AND
((((ResponsibleWorker == 22565420974) || ((ResponsibleWorker != 22565420974) && (Sensitivity !=
2))))) OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_ResponsibleWorker)
ON smmActivities.ResponsibleWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_ResponsibleWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_DoneByWorker) ON
smmActivities.DoneByWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_DoneByWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
NOTEXISTS JOIN FORUPDATE * FROM HierarchyTreeTable(HierarchyTreeTable_1) WHERE
smmActivities.RecId = HierarchyTreeTable.RefRecId AND ((ElementNodeType = 0))}
propertyValidated is evaluated to false because of different range values, thus the import of workspace
fails.
Proposed Fix
Tried the below fix changes
1. Removed the highlighted code in red and added 0 instead.
2. Removed the highlighted range in red.
Results of Proposed Fix
After removing the above changes, we are able to import the workspace containing “My open activities”
using a different user.
Expected Result
But the worker associated with TestUsr does not have any open activities. Since we are trying to remove
the ResponsibleWorker range it is displaying all the activities irrespective of the worker which is not
correct.
TargetQuery
{Query smmActivities_MyOpen object 7f2480a0: SELECT FIRSTFAST FORUPDATE * FROM
smmActivities(smmActivities) USING INDEX ActivityNumberIdx ORDER BY smmActivities.StartDateTime
ASC, smmActivities.TaskPriority ASC WHERE ((IsTemplate = 0)) AND (((ResponsibleWorker != 0)))) AND
((Closed = 0)) AND ((((ResponsibleWorker == 0) || ((ResponsibleWorker != 0) && (Sensitivity != 2)))))
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_ResponsibleWorker) ON
smmActivities.ResponsibleWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_ResponsibleWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_DoneByWorker) ON
smmActivities.DoneByWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_DoneByWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
NOTEXISTS JOIN FORUPDATE * FROM HierarchyTreeTable(HierarchyTreeTable_1) WHERE
smmActivities.RecId = HierarchyTreeTable.RefRecId AND ((ElementNodeType = 0))}
MergeQuery
{Query smmActivities_MyOpen object 7f24ba70: SELECT FIRSTFAST FORUPDATE * FROM
smmActivities(smmActivities) USING INDEX ActivityNumberIdx ORDER BY smmActivities.StartDateTime
ASC, smmActivities.TaskPriority ASC WHERE ((IsTemplate = 0)) AND (((ResponsibleWorker != 0)))) AND
((Closed = 0)) AND ((((ResponsibleWorker == 0) || ((ResponsibleWorker != 0) && (Sensitivity != 2)))))
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_ResponsibleWorker) ON
smmActivities.ResponsibleWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_ResponsibleWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
OUTER JOIN FORUPDATE Person, Person FROM HcmWorker(Ref_HcmWorker_DoneByWorker) ON
smmActivities.DoneByWorker = HcmWorker.RecId OUTER JOIN FORUPDATE Name, RecId FROM
DirPerson(Ref_DirPerson_DoneByWorker_DirPerson_FK) ON HcmWorker.Person = DirPerson.RecId
NOTEXISTS JOIN FORUPDATE * FROM HierarchyTreeTable(HierarchyTreeTable_1) WHERE
smmActivities.RecId = HierarchyTreeTable.RefRecId AND ((ElementNodeType = 0))}
Conclusion
The range in SmmActivities for ResponsibleWorker ((ResponsibleWorker ==
HcmWorkerLookup::currentWorker()) && (ResponsibleWorker != 0)) is preventing the workspace
containing “my open activities” from importing across different users.
With above proposed fix able to import the workspace across different users but showing activities for
user who don’t have open activities.
Please validate above observations and proposed fix to proceed further.