- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 09:07 AM
Hi,
can any one help me
when i am create a stories for particular project that project record not showing in list
Script Include: ScrumSecurityManager
var ScrumSecurityManager = Class.create();
// Constants available for the Scrum Security Manager classes. These are split into 3 categories:
// [1] Roles - these represent the Product Owner, Scrum Master and Team Member roles and combinations thereof.
// [2] Actions - these represent the the types of operations a user may need to perform on the Scrum tables.
// [3] Tables - these represent the names of the SQL tables used by the Scrum application.
ScrumSecurityManager.PRODUCT_OWNER = ["Product Owner"];
ScrumSecurityManager.SCRUM_MASTER = ["Scrum Master"];
ScrumSecurityManager.TEAM_MEMBER = ["Team Member"];
ScrumSecurityManager.SCRUM_MASTER_TEAM_MEMBER = [ "Scrum Master", "Team Member" ];
ScrumSecurityManager.PRODUCT_OWNER_SCRUM_MASTER = [ "Product Owner", "Scrum Master" ];
ScrumSecurityManager.ANY_TEAM_MEMBER = [ "Product Owner", "Scrum Master", "Team Member"];
//--------------------------------------------------------------------------------------------------
ScrumSecurityManager.CREATE = "Create";
ScrumSecurityManager.DELETE = "Delete";
ScrumSecurityManager.READ = "Read";
ScrumSecurityManager.WRITE = "Write";
//--------------------------------------------------------------------------------------------------
ScrumSecurityManager.USER_PERMISSIONS = "scrum_user_permissions";
ScrumSecurityManager.GROUP_PERMISSIONS = "scrum_group_permissions";
ScrumSecurityManager.PRODUCT_RELEASE = "m2m_product_release";
//ScrumSecurityManager.EPIC_RELEASE = "m2m_scrum_epic_release";
ScrumSecurityManager.PRODUCT = "cmdb_model";
ScrumSecurityManager.RELEASE = "rm_release_scrum";
ScrumSecurityManager.SPRINT = "rm_sprint";
ScrumSecurityManager.EPIC = "rm_epic";
ScrumSecurityManager.STORY = "rm_story";
ScrumSecurityManager.TASK = "rm_scrum_task";
ScrumSecurityManager.AGILE_TEAM = '1bff3b1493030200ea933007f67ffb6d';
// the ScrumSecurityManager implementation to be used
ScrumSecurityManager.DEFAULT_SMCLASSNAME = 'ScrumSecurityManagerDefault'; // the default
ScrumSecurityManager.SDLC_SCRUM_SMCLASSNAME = 'com.snc.sdlc.scrum.pp.smclass'; // sys_properties
ScrumSecurityManager.impl = function() {
var klass = ScrumSecurityManager._getClass(gs.getProperty(ScrumSecurityManager.SDLC_SCRUM_SMCLASSNAME, 'ScrumSecurityManagerDefault'));
var impl = new klass();
return impl;
};
//--------------------------------------------------------------------------------------------------
// can user create <x>?
//--------------------------------------------------------------------------------------------------
ScrumSecurityManager.canCreateProductRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateProductRelease(glideRecord);
};
ScrumSecurityManager.canCreateEpicRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateEpicRelease(glideRecord);
};
ScrumSecurityManager.canCreateGroupPermissions = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateGroupPermissions(glideRecord);
};
ScrumSecurityManager.canCreateUserPermissions = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateUserPermissions(glideRecord);
};
ScrumSecurityManager.canCreateProduct = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateProduct(glideRecord);
};
ScrumSecurityManager.canCreateRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateRelease(glideRecord);
};
ScrumSecurityManager.canCreateReleaseForProduct = function(product) {
return ScrumSecurityManager.impl().canCreateReleaseForProduct(product);
};
ScrumSecurityManager.canCreateSprint = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateSprint(glideRecord);
};
ScrumSecurityManager.canCreateEpic = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateEpic(glideRecord);
};
ScrumSecurityManager.canCreateStory = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateStory(glideRecord);
};
ScrumSecurityManager.canCreateStoryForProduct = function(product) {
return ScrumSecurityManager.impl().canCreateStoryForProduct(product);
};
ScrumSecurityManager.canCreateTask = function(glideRecord) {
return ScrumSecurityManager.impl().canCreateTask(glideRecord);
};
//--------------------------------------------------------------------------------------------------
// can user delete <x>?
//--------------------------------------------------------------------------------------------------
ScrumSecurityManager.canDeleteProductRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteProductRelease(glideRecord);
};
ScrumSecurityManager.canDeleteProduct = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteProduct(glideRecord);
};
ScrumSecurityManager.canDeleteGroupPermissions = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteGroupPermissions(glideRecord);
};
ScrumSecurityManager.canDeleteUserPermissions = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteUserPermissions(glideRecord);
};
ScrumSecurityManager.canDeleteRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteRelease(glideRecord);
};
ScrumSecurityManager.canDeleteSprint = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteSprint(glideRecord);
};
ScrumSecurityManager.canDeleteEpic = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteEpic(glideRecord);
};
ScrumSecurityManager.canDeleteStory = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteStory(glideRecord);
};
ScrumSecurityManager.canDeleteTask = function(glideRecord) {
return ScrumSecurityManager.impl().canDeleteTask(glideRecord);
};
//--------------------------------------------------------------------------------------------------
// can user read <x>?
//--------------------------------------------------------------------------------------------------
ScrumSecurityManager.canReadProductContents = function() {
return ScrumSecurityManager.impl().canReadProductContents();
};
ScrumSecurityManager.canReadProductRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canReadProductRelease(glideRecord);
};
ScrumSecurityManager.canReadEpicRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canReadEpicRelease(glideRecord);
};
ScrumSecurityManager.canReadGroupPermissions = function(glideRecord) {
return ScrumSecurityManager.impl().canReadGroupPermissions(glideRecord);
};
ScrumSecurityManager.canReadUserPermissions = function(glideRecord) {
return ScrumSecurityManager.impl().canReadUserPermissions(glideRecord);
};
ScrumSecurityManager.canReadProduct = function(glideRecord) {
return ScrumSecurityManager.impl().canReadProduct(glideRecord);
};
ScrumSecurityManager.canReadRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canReadRelease(glideRecord);
};
ScrumSecurityManager.canReadSprint = function(glideRecord) {
return ScrumSecurityManager.impl().canReadSprint(glideRecord);
};
ScrumSecurityManager.canReadEpic = function(glideRecord) {
return ScrumSecurityManager.impl().canReadEpic(glideRecord);
};
ScrumSecurityManager.canReadStory = function(glideRecord) {
return ScrumSecurityManager.impl().canReadStory(glideRecord);
};
ScrumSecurityManager.canReadTask = function(glideRecord) {
return ScrumSecurityManager.impl().canReadTask(glideRecord);
};
//--------------------------------------------------------------------------------------------------
// can user write to <x>?
//--------------------------------------------------------------------------------------------------
ScrumSecurityManager.canWriteStoryDotProduct = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteStoryDotProduct(glideRecord);
};
ScrumSecurityManager.canWriteAnyStoryOrTaskDotState = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteAnyStoryOrTaskDotState(glideRecord);
};
ScrumSecurityManager.canWriteStoryDotRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteStoryDotRelease(glideRecord);
};
ScrumSecurityManager.canWriteStoryDotSprint = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteStoryDotSprint(glideRecord);
};
ScrumSecurityManager.canWriteProductRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteProductRelease(glideRecord);
};
ScrumSecurityManager.canWriteEpicRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteEpicRelease(glideRecord);
};
ScrumSecurityManager.canWriteGroupPermissions = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteGroupPermissions(glideRecord);
};
ScrumSecurityManager.canWriteUserPermissions = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteUserPermissions(glideRecord);
};
ScrumSecurityManager.canWriteProduct = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteProduct(glideRecord);
};
ScrumSecurityManager.canWriteRelease = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteRelease(glideRecord);
};
ScrumSecurityManager.canWriteSprint = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteSprint(glideRecord);
};
ScrumSecurityManager.canWriteEpic = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteEpic(glideRecord);
};
ScrumSecurityManager.canWriteStory = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteStory(glideRecord);
};
ScrumSecurityManager.canWriteTask = function(glideRecord) {
return ScrumSecurityManager.impl().canWriteTask(glideRecord);
};
//--------------------------------------------------------------------------------------------------
// methods that return a list of <x> that the user can access
//--------------------------------------------------------------------------------------------------
ScrumSecurityManager.getEpicReleases = function() {
return ScrumSecurityManager.impl().getEpicReleases();
};
ScrumSecurityManager.getGroupPermissions = function() {
return ScrumSecurityManager.impl().getGroupPermissions();
};
ScrumSecurityManager.getUserPermissions = function() {
return ScrumSecurityManager.impl().getUserPermissions();
};
ScrumSecurityManager.getProducts = function() {
return ScrumSecurityManager.impl().getProducts();
};
ScrumSecurityManager.getReleases = function(funcFilter) {
return ScrumSecurityManager.impl().getReleases(funcFilter);
};
ScrumSecurityManager.getReleasesForProduct = function(productId) {
return ScrumSecurityManager.impl().getReleasesForProduct(productId);
};
ScrumSecurityManager.getEpicsForProduct = function(productId, funcFilter) {
return ScrumSecurityManager.impl().getEpicsForProduct(productId, funcFilter);
};
ScrumSecurityManager.getProductsForUser = function() {
return ScrumSecurityManager.impl().getProductsForUser();
};
ScrumSecurityManager.getSprints = function() {
return ScrumSecurityManager.impl().getSprints();
};
ScrumSecurityManager.getSprintsForRelease = function(releaseId) {
return ScrumSecurityManager.impl().getSprintsForRelease(releaseId);
};
ScrumSecurityManager.getSprintsForUser = function() {
return ScrumSecurityManager.impl().getSprintsForUser();
};
ScrumSecurityManager.getEpics = function() {
return ScrumSecurityManager.impl().getEpics();
};
ScrumSecurityManager.getStories = function() {
return ScrumSecurityManager.impl().getStories();
};
ScrumSecurityManager.getTasks = function() {
return ScrumSecurityManager.impl().getTasks();
};
ScrumSecurityManager.getEncodedQuery = function(array) {
return 'sys_idIN' + array.join(',');
};
ScrumSecurityManager.getScrumUserIds = function () {
return ScrumSecurityManager.impl().getScrumUserIds();
};
//========================================================================
ScrumSecurityManager.getReleaseDotDefaultTeam = function (recRmReleaseScrum) {
return ScrumSecurityManager.impl().getReleaseDotDefaultTeam (recRmReleaseScrum);
};
ScrumSecurityManager.getStoryDotAssignedTo = function (recRmStory) {
return ScrumSecurityManager.impl().getStoryDotAssignedTo (recRmStory);
};
ScrumSecurityManager.getScrumTaskDotAssignedTo = function (recRmScrumTask) {
return ScrumSecurityManager.impl().getScrumTaskDotAssignedTo (recRmScrumTask);
};
ScrumSecurityManager.getScrumReleaseTeamMemberDotName = function (recScrumReleaseTeamMember) {
return ScrumSecurityManager.impl().getScrumReleaseTeamMemberDotName(recScrumReleaseTeamMember);
};
ScrumSecurityManager.getScrumSprintTeamMemberDotName = function (recScrumSprintTeamMember) {
return ScrumSecurityManager.impl().getScrumSprintTeamMemberDotName(recScrumSprintTeamMember);
};
ScrumSecurityManager.getScrumSprintTeamDotSprint = function (recScrumSprintTeam) {
return ScrumSecurityManager.impl().getScrumSprintTeamDotSprint(recScrumSprintTeam);
};
ScrumSecurityManager.getScrumReleaseTeamDotPoints = function (recScrumReleaseTeam) {
return ScrumSecurityManager.impl().getScrumReleaseTeamDotPoints(recScrumReleaseTeam);
};
ScrumSecurityManager.getScrumSprintTeamDotPoints = function (recScrumSprintTeam) {
return ScrumSecurityManager.impl().getScrumSprintTeamDotPoints(recScrumSprintTeam);
};
ScrumSecurityManager.getSprintDotTeam = function (recSprint) {
return ScrumSecurityManager.impl().getSprintDotTeam(recSprint);
};
ScrumSecurityManager.getSprintDotReleaseTeam = function (recSprint) {
return ScrumSecurityManager.impl().getSprintDotReleaseTeam(recSprint);
};
ScrumSecurityManager.getSprintDotStoryPoints = function (recSprint) {
return ScrumSecurityManager.impl().getSprintDotStoryPoints(recSprint);
};
ScrumSecurityManager.getSprintDotTeamPoints = function (recSprint) {
return ScrumSecurityManager.impl().getSprintDotTeamPoints(recSprint);
};
ScrumSecurityManager.validateSprintFields = function (sprintRecord) {
return ScrumSecurityManager.impl().validateSprintFields(sprintRecord);
};
ScrumSecurityManager.getEpicDotParentEpic = function (recEpic) {
return ScrumSecurityManager.impl().getEpicDotParentEpic(recEpic);
};
ScrumSecurityManager.getStoryDotEpic = function (recEpic) {
return ScrumSecurityManager.impl().getStoryDotEpic(recEpic);
};
ScrumSecurityManager.getSprintDotRelease = function (recSprint) {
return ScrumSecurityManager.impl().getSprintDotRelease(recSprint);
};
ScrumSecurityManager.getStoryDotProduct = function (recStory) {
return ScrumSecurityManager.impl().getStoryDotProduct(recStory);
};
ScrumSecurityManager.getStoryDotRelease = function (recStory) {
return ScrumSecurityManager.impl().getStoryDotRelease(recStory);
};
ScrumSecurityManager.getStoryDotSprint = function (recStory) {
return ScrumSecurityManager.impl().getStoryDotSprint(recStory);
};
ScrumSecurityManager.getStoryDotTheme = function (recStory) {
return ScrumSecurityManager.impl().getStoryDotTheme(recStory);
};
ScrumSecurityManager.getPhaseDotGroup = function (recPhase,column_name) {
return ScrumSecurityManager.impl().getPhaseDotGroup(recPhase, column_name);
};
ScrumSecurityManager.getEpicDotTheme = function (recEpic) {
return ScrumSecurityManager.impl().getEpicDotTheme(recEpic);
};
ScrumSecurityManager.getEpicDotProduct = function (recEpic) {
return ScrumSecurityManager.impl().getEpicDotProduct(recEpic);
};
ScrumSecurityManager.getThemeDotProduct = function (recScrumTheme) {
return ScrumSecurityManager.impl().getThemeDotProduct(recScrumTheme);
};
ScrumSecurityManager.getTeamMemberDotName = function (teamMember) {
return ScrumSecurityManager.impl().getTeamMemberDotName(teamMember);
};
ScrumSecurityManager.getStoryDotTeam = function (recStory) {
return ScrumSecurityManager.impl().getStoryDotTeam(recStory);
};
ScrumSecurityManager.getStoryDotGroup = function (recStory) {
return ScrumSecurityManager.impl().getStoryDotGroup(recStory);
};
ScrumSecurityManager.getStoryDotPhases = function(recStory){
return ScrumSecurityManager.impl().getStoryDotPhases(recStory);
};
ScrumSecurityManager.getReleaseGroupAssignmentDotSprints = function(recReleaseGroupAssignment){
return ScrumSecurityManager.impl().getReleaseGroupAssignmentDotSprints(recReleaseGroupAssignment);
};
ScrumSecurityManager.getStoryDotProject = function(recStory){
return ScrumSecurityManager.impl().getStoryDotProject(recStory);
};
ScrumSecurityManager.isAgileGroup = function(recGroup){
return ScrumSecurityManager.impl().isAgileGroup(recGroup);
};
//========================================================================
ScrumSecurityManager._getClass = function(securityManagerClassName) {
var _outerScope = JSUtil.getGlobal();
var securityManagerClass = _outerScope[securityManagerClassName];
// check that securityManagerClassName is defined, and looks valid as a ScrumSecurityManager Class
if (!ScrumSecurityManager._isValidSMClass(securityManagerClass)) {
securityManagerClass = _outerScope[ScrumSecurityManager.DEFAULT_SMCLASSNAME];
securityManagerClassName = ScrumSecurityManager.DEFAULT_SMCLASSNAME;
}
return securityManagerClass;
};
ScrumSecurityManager._isValidSMClass = function(klass) {
if (typeof klass == 'undefined') {
return false;
}
// a sample of the necessary methods
var smClassMethods = [ 'canCreateProductRelease', 'canDeleteEpic', 'canReadTask', 'canWriteSprint', 'getReleases' ];
for (var i = 0; i < smClassMethods.length; i++) {
if (typeof klass.prototype[smClassMethods[i]] == 'undefined') {
return false;
}
}
return true;
};
ScrumSecurityManager.prototype = {
initialize: function() {
},
type: 'ScrumSecurityManager'
};
//--------------------------------------------------------------------------------------------------
//ScrumSecurityManager.THEME_RELEASE = "m2m_scrum_theme_release";
//ScrumSecurityManager.THEME = "scrum_theme";
//--------------------------------------------------------------------------------------------------
//ScrumSecurityManager.canCreateThemeRelease = function(glideRecord) {
// return ScrumSecurityManager.impl().canCreateThemeRelease(glideRecord);
//};
//ScrumSecurityManager.canCreateTheme = function(glideRecord) {
// return ScrumSecurityManager.impl().canCreateTheme(glideRecord);
//};
//ScrumSecurityManager.canCreateReleaseForTheme = function(theme) {
// return ScrumSecurityManager.impl().canCreateReleaseForTheme(theme);
//};
//ScrumSecurityManager.canCreateStoryForTheme = function(theme) {
// return ScrumSecurityManager.impl().canCreateStoryForTheme(theme);
//};
//ScrumSecurityManager.canDeleteThemeRelease = function(glideRecord) {
// return ScrumSecurityManager.impl().canDeleteThemeRelease(glideRecord);
//};
//ScrumSecurityManager.canDeleteTheme = function(glideRecord) {
// return ScrumSecurityManager.impl().canDeleteTheme(glideRecord);
//};
//ScrumSecurityManager.canReadThemeContents = function() {
// return ScrumSecurityManager.impl().canReadThemeContents();
//};
//ScrumSecurityManager.canReadThemeRelease = function(glideRecord) {
// return ScrumSecurityManager.impl().canReadThemeRelease(glideRecord);
//};
//ScrumSecurityManager.canReadTheme = function(glideRecord) {
// return ScrumSecurityManager.impl().canReadTheme(glideRecord);
//};
//ScrumSecurityManager.canWriteStoryDotTheme = function(glideRecord) {
// return ScrumSecurityManager.impl().canWriteStoryDotTheme(glideRecord);
//};
//ScrumSecurityManager.canWriteThemeRelease = function(glideRecord) {
// return ScrumSecurityManager.impl().canWriteThemeRelease(glideRecord);
//};
//ScrumSecurityManager.canWriteTheme = function(glideRecord) {
// return ScrumSecurityManager.impl().canWriteTheme(glideRecord);
//};
//ScrumSecurityManager.getThemes = function() {
// return ScrumSecurityManager.impl().getThemes();
//};
//ScrumSecurityManager.getReleasesForTheme = function(themeId) {
// return ScrumSecurityManager.impl().getReleasesForTheme(themeId);
//};
//ScrumSecurityManager.getEpicsForTheme = function(themeId, funcFilter) {
// return ScrumSecurityManager.impl().getEpicsForTheme(themeId, funcFilter);
//};
//ScrumSecurityManager.getThemesForUser = function() {
// return ScrumSecurityManager.impl().getThemesForUser();
//};
//--------------------------------------------------------------------------------------------------
Solved! Go to Solution.

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 09:29 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 09:50 AM
at script side i can see execution_type is anything. then it should take any type right?
why it is not allowing waterfall???
getStoryDotProject: function(story){
var projectId;
var qualifier = 'sys_class_nameIN'+PPMRoleClassMapper.getClasses('project', gs.getUser());
if(JSUtil.notNil(story.demand)){
projectId = story.demand.project + '';
qualifier = 'sys_idIN'+projectId;
}
qualifier += '^execution_typeANYTHING';
return qualifier;
},

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 09:58 AM
use below code, this code is working for me.
You will have to also have to check if current user has project manager role
getStoryDotProject: function(story){
var projectId;
var qualifier = 'sys_class_nameIN'+PPMRoleClassMapper.getClasses('project', gs.getUser());
// if(JSUtil.notNil(story.demand)){
// projectId = story.demand.project + '';
// qualifier = 'sys_idIN'+projectId;
// }
qualifier += '^execution_typeANYTHING';
return qualifier;
},
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 10:04 AM
i followed your steps working great.thanks a lot.
User has Project manager role....
apologizes from my side, same question i am asking you again.
Can you please help me this one .
if we take Waterfall that project record not showing at Stories side. can we see where we have that limitation , means the execution type should be agile/hybrid.
getStoryDotProject: function(story){
var projectId;
var qualifier = 'sys_class_nameIN'+PPMRoleClassMapper.getClasses('project', gs.getUser());
// if(JSUtil.notNil(story.demand)){
// projectId = story.demand.project + '';
// qualifier = 'sys_idIN'+projectId;
// }
qualifier += '^execution_typeANYTHING';
return qualifier;
},

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 10:22 AM
Execution type limitation is in below code
qualifier += '^execution_typeANYTHING';
But, below code will execute first which calls getClasses() function from PPMRoleClassMapper script include.
var qualifier = sys_class_nameIN'+PPMRoleClassMapper.getClasses('project', gs.getUser());
if you see getClasses() function in PPMRoleClassMapper script include, it returns valid class name for project records if current user has it_project_manager role.
So, all below conditions will be used to return list of all projects
- Class Name should be pm_project
- Current user should have it_project_manager role
- List of all projects which satisfies above conditions.
I will suggest you to add debug log messages to print output of different functions to understand code.
Regards,
Sachin

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2020 09:32 AM