{"revision":"c10276e953456835cdbb1f3a60d58ae1980be353","document":{"id":14852,"path":"field-service-management/field-service-scheduling/script-guidelines-recommendation-criteria.md","title":"Providing a script for custom task recommendation criteria","bundle":null,"doc_type":null,"release":"australia","body":"\n# Providing a script for custom task recommendation criteria\n\nGuidelines for creating scripts in recommendation criteria for an Intelligent Task Recommendation policy.\n\n## Customization script return object\n\nYour script should return a JavaScript object in a minimum form as follows:\n\n```\n{ \n  \"<task sys_id1>\": \n    {\n      \"rating\": <rating1>\n    },\n  \"<task sys_id2>”:\n    {\n      \"rating\": <rating2>\n    },\n  …\n}\n```\n\nFor filter constraints, set the return objects rating to one to unify the filter constraint result of the recommendation criteria by using the sn\\_task\\_recommend.TaskRecommendationUtil.setRatingToOne\\(your object\\); method.\n\nTo normalize the rating result of ranking criteria, the return JavaScript object should include normalization information.\n\n```\n{           \n    \"<task <sys_id1>\":     \n        {\n            \"rating\": <rating1>, \n            \"normalizationData\": \n                {\n                    \"numerator\": <numerator value1>,\n                    \"denominator\": <denominator value1> \n                }\n        },    \n    \"<task <sys_id2>\":     \n        {\n            \"rating\": <rating2>, \n            \"normalizationData\": \n                {\n                    \"numerator\": <numerator value2>,\n                    \"denominator\": <denominator value2> \n                }\n        },\n    ...\n}\n```\n\nFor ranking criteria, the return object can contain data for final normalization.\n\n**Note:** If your scripts include normalization data, you can refer to the default script includes in the predefined recommendation criteria:\n\n-   The filtering constraint Exclude tasks agent cannot travel to: sn\\_fsm\\_task\\_rec.TaskRecommendationDistanceRuleProcessor\n-   The ranking criteria Distance from task: rankTaskOnDistance\\(\\)\n\n## Customized script in recommendation criteria\n\nThe following example shows how to write a script for the recommendation criteria.\n\n```\nvar customizedScript = <your-script>; \nvar customizedResult = customizedScript.<your-method>(); \nruleResult = TaskRecommendationFSMUtil.parseRuleResult(customizedResult, \"<customized-rule>\");\n```\n\nThe following sample configuration provides a \"distance from task\" filter constraint.\n\n```\nvar distanceRule = new TaskRecommendationDistanceRuleProcessor(args); \nvar ruleProcessResult = distanceRule.processRule(user, tasks, timeStart, timeEnd, 'ranking'); \nruleResult = TaskRecommendationFSMUtil.parseRuleResult(ruleProcessResult, \"Distance from task\");\n```\n\n**Note:** Do not replace the task recommendation application keyword `ruleResult` in the script with any other words. Otherwise, the application will not be able to process the rule execution result.\n\n"}}