{"id":252170,"date":"2015-03-02T11:29:02","date_gmt":"2015-03-02T07:29:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=252170"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=252170","title":{"rendered":"UI \u0434\u043b\u044f Ensemble Workflow \u043d\u0430 Angular"},"content":{"rendered":"\n<p>  \u0422\u0435, \u043a\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 InterSystems Ensemble, \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Ensemble Workflow \u0438 \u043a\u0430\u043a \u043e\u043d\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043b\u044e\u0434\u0435\u0439. \u0414\u043b\u044f \u0442\u0435\u0445 \u0436\u0435, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 Ensemble (\u0438\/\u0438\u043b\u0438 Workflow), \u044f \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0448\u0443 \u0435\u0451 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 (\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0438 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Workflow \u043d\u0430 Angular.js).<\/p>\n<p>  InterSystems Ensemble<br \/>\n  \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 InterSystems Ensemble \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u043e\u0432\u043e\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0438\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c. Ensemble \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447: EAI, SOA, BPM, BAM \u0438 \u0434\u0430\u0436\u0435 BI (\u0437\u0430 \u0441\u0447\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 InterSystems DeepSee).<\/p>\n<p>  \u0412 Ensemble \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<br \/>\n    \u0410\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 Ensemble \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b (Web- \u0438 Rest- \u0441\u0435\u0440\u0432\u0438\u0441\u044b, File, FTP, Email, SQL, EDI, HL7, SAP, Siebel, 1C \u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0438 \u0442.\u0434.). \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Adapter SDK.  \u0411\u0438\u0437\u043d\u0435\u0441-\u0441\u043b\u0443\u0436\u0431\u044b \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f Ensemble, \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438\/\u0438\u043b\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.  \u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u2013 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u043b\u044f \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u043e\u0432\u043a\u0438 \u0441\u043b\u0443\u0436\u0431 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u0438\/\u0438\u043b\u0438 \u043b\u044e\u0434\u0435\u0439 (\u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 Workflow). \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043b\u0438\u0431\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 Business Process Language, \u043b\u0438\u0431\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0430 Cach\u00e9 Object Script. \u041b\u043e\u0433\u0438\u043a\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0430 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0443\u0436\u0431 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.  \u0411\u0438\u0437\u043d\u0435\u0441-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Ensemble \u0432 \u0444\u043e\u0440\u043c\u0430\u0442, \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.   \u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b Ensemble \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u044f\u0437\u044b\u043a Data Transformation Language.  \u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u2013 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 Ensemble \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439.  \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u2013 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Ensemble Workflow \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438.  \u0411\u0438\u0437\u043d\u0435\u0441-\u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u2013 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0430\u043d\u0435\u043b\u044f\u043c\u0438 (Dashboards) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0443 \u0431\u0438\u0437\u043d\u0435\u0441-\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 (Business Activity Monitoring, BAM).    <\/p>\n<p>  \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Ensemble Workflow \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. <\/p>\n<p>  \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Ensemble Workflow<br \/>\n  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e Workflow Management Coalition (www.WfMC.org), \u201c\u043f\u043e\u0442\u043e\u043a\u0438 \u0440\u0430\u0431\u043e\u0442 (Workflow) \u2014 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b.\u201d<\/p>\n<p>  \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b Workflow:<br \/>\n    \u0417\u0430\u0434\u0430\u0447\u0430 Workflow \u2014 \u00ab\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u00bb \u0440\u0430\u0431\u043e\u0442\u044b  \u041f\u043e\u0442\u043e\u043a \u0440\u0430\u0431\u043e\u0442 \u2014 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c Workflow \u2014 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435   \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442  \u0420\u043e\u043b\u044c Workflow \u2014 \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442   \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0437\u0430\u0434\u0430\u0447.   <\/p>\n<p>  \u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0432 Ensemble \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442:<br \/>\n    \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b Ensemble  \u0413\u0438\u0431\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442  \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Workflow-\u043f\u043e\u0440\u0442\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Ensemble  \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 Ensemble  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 Ensemble  \u041b\u0435\u0433\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Workflow  <\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Ensemble HelpDesk \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0441\u043b\u0443\u0436\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 Ensemble \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 Ensdemo. Ensemble \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 HelpDesk.<\/p>\n<p>  \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 HelpDesk<\/p>\n<p>  \u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0440\u043e\u043b\u0438 Demo-Development \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 EnsLib.Workflow.TaskRequest, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u201c\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e\u201d \u0438\u043b\u0438 \u201c\u041f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e\u201d), \u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043b\u0435 \u201c\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439\u201d. \u0412 \u0442\u0435\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435, \u0441\u043e\u043e\u0431\u0449\u0438\u0432\u0448\u0435\u043c \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 Workflow-\u043f\u043e\u0440\u0442\u0430\u043b\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0440\u043e\u043b\u0438 Demo-Development \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 TaskRequest) \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c (\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0440\u043e\u043b\u044c\u044e), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u043e \u0435\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044c, \u043d\u0430\u0436\u0430\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443. \u0422\u0430\u043a \u0436\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u0430\u0436\u0430\u0432 \u043a\u043d\u043e\u043f\u043a\u0443 \u201c\u0423\u0441\u0442\u0443\u043f\u0438\u0442\u044c\u201d.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u201c\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e\u201d, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u043b\u0435. \u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 HelpDesk \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0440\u043e\u043b\u0438 Demo-Testing, \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u201c\u041f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e\u201d, \u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u0430\u043a \u201cNot a problem\u201d \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, Ensemble Workflow \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0440\u0430\u0431\u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0435 Ensemble Workflow \u043c\u043e\u0436\u043d\u043e \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Ensemble \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 Defining Workflow.<\/p>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Ensemble Workflow \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0430 \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0435 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 InterSystems Ensemble. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Ensemble Workflow \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u043c \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u043c \u043d\u0430 Angular.js + REST API. <\/p>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Ensemble Workflow \u043d\u0430 Angular.js.<br \/>\n  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 Workflow \u043d\u0430 Angular.js \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 Ensemble \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f:<br \/>\n    UI \u043d\u0430 Angular.js  REST API<br \/>\n  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043e\u043f\u0438\u0441\u0430\u043d \u0432 Readme \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0435\u0432.<\/p>\n<p>  \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432\u0441\u044f \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c Ensemble Workflow: \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430, \u043f\u043e\u043b\u043d\u043e\u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0437\u0430\u0434\u0430\u0447\u0430\u043c. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c\/\u043e\u0442\u043a\u043b\u043e\u043d\u044f\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438, \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u0437\u0430\u0434\u0430\u0447\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u043c \u043e\u043a\u043d\u0435.<\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435 \u0432 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432 \u043f\u043b\u0430\u043d\u0430\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043c\u0435\u043d\u044b \u043e\u0431\u043b\u0430\u0441\u0442\u0438 (\u043d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e). <\/p>\n<p>  \u041d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d Twitter Bootstrap<\/p>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0435\u0442\u0430\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<br \/>\n  \u0412 UI \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0438: js-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Angular.js, css-\u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a Twitter Bootstrap, js-\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 jQuery, \u0430 \u0442\u0430\u043a \u0436\u0435 \u0438\u043a\u043e\u043d\u043e\u0447\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b FontAwesome.<\/p>\n<p>  \u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 4 Angular-\u0441\u0435\u0440\u0432\u0438\u0441\u0430 (RESTSrvc, SessionSrvc, UtilSrvc \u0438 WorklistSrvc), 3 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 (MainCtrl, TaskCtrl, TasksGridCtrl), \u0433\u043b\u0430\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 (index.csp) \u0438 2 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 (task.csp \u0438 tasks.csp).<\/p>\n<p>  \u0421\u0435\u0440\u0432\u0438\u0441 RESTSrvc \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434 getPromise \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0431\u0435\u0440\u0442\u043a\u043e\u0439 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 $http Angular.js. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 RESTSrvc \u2014 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c HTTP-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b promise \u044d\u0442\u0438\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 RESTSrvc \u0434\u043b\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0438 \u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0441\u0438\u0442, \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440.<br \/>\n  RESTSrvc.js&#8217;use strict&#8217;;  function RESTSrvc($http, $q) {    return {     getPromise:        function(config) {         var deferred = $q.defer();          $http(config).             success(function(data, status, headers, config) {              deferred.resolve(data);             }).             error(function(data, status, headers, config) {               deferred.reject(data, status, headers, config);             });          return deferred.promise;       }     } };  \/\/ resolving minification problems RESTSrvc.$inject = [&#8216;$http&#8217;, &#8216;$q&#8217;]; servicesModule.factory(&#8216;RESTSrvc&#8217;, RESTSrvc);  <\/p>\n<p>  SessionSrvc \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u043e\u0434\u0438\u043d \u043c\u0435\u0442\u043e\u0434, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0435 \u0441\u0435\u0441\u0441\u0438\u0438. \u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Basic access authetication (http:\/\/en.wikipedia.org\/wiki\/Basic_access_authentication), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u0430\u0436\u0434\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u0438\u043c\u0435\u0435\u0442 \u0432 header\u2019\u0435 \u0442\u043e\u043a\u0435\u043d \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438.<br \/>\n  SessionSrvc.js&#8217;use strict&#8217;;  \/\/ Session service function SessionSrvc(RESTSrvc) {       return {     \/\/ save worklist object     logout:        function(baseAuthToken) {         return RESTSrvc.getPromise( {method: &#8216;GET&#8217;, url: RESTWebApp.appName + &#8216;\/logout&#8217;,                                       headers: {&#8216;Authorization&#8217; : baseAuthToken} });       }   } };  \/\/ resolving minification problems SessionSrvc.$inject = [&#8216;RESTSrvc&#8217;]; servicesModule.factory(&#8216;SessionSrvc&#8217;, SessionSrvc); <\/p>\n<p>  UtilSrvc \u2014 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f cookie \u043f\u043e \u0438\u043c\u0435\u043d\u0438, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e \u0438\u043c\u0435\u043d\u0438.<br \/>\n  UtilSrvc.js&#8217;use strict&#8217;;  \/\/ Utils service function UtilSrvc($cookies) {       return {     \/\/ get cookie by name     readCookie:        function(name) {         return $cookies[name];       },             \/\/ Function to get value of property of the object by name       \/\/ Example:        \/\/ var obj = {car: {body: {company: {name: &#8216;Mazda&#8217;}}}};       \/\/ getPropertyValue(obj, &#8216;car.body.company.name&#8217;)        getPropertyValue:         function(item, propertyStr) {           var value = item;            try {             var properties = propertyStr.split(&#8216;.&#8217;);                          for (var i = 0; i &lt; properties.length; i++) {               value = value[properties[i]];                                  if (value !== Object(value))                 break;             }           }           catch(ex) {             console.log(&#8216;Something goes wrong :\/&#8217;);           }            return value == undefined ? &#187; : value;         }   } };  \/\/ resolving minification problems UtilSrvc.$inject = [&#8216;$cookies&#8217;]; servicesModule.factory(&#8216;UtilSrvc&#8217;, UtilSrvc); <\/p>\n<p>  WorklistSrvc \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447.<br \/>\n  WorklistSrvc.js&#8217;use strict&#8217;;  \/\/ Worklist service function WorklistSrvc(RESTSrvc) {       return {     \/\/ save worklist object     save:        function(worklist, baseAuthToken) {         return RESTSrvc.getPromise( {method: &#8216;POST&#8217;, url: RESTWebApp.appName + &#8216;\/tasks\/&#8217; + worklist._id, data: worklist,                                       headers: {&#8216;Authorization&#8217; : baseAuthToken} });       },          \/\/ get worklist by id      get:        function(id, baseAuthToken) {         return RESTSrvc.getPromise( {method: &#8216;GET&#8217;, url: RESTWebApp.appName + &#8216;\/tasks\/&#8217; + id,headers: {&#8216;Authorization&#8217; : baseAuthToken} });       },          \/\/ get all worklists for current user     getAll:        function(baseAuthToken) {         return RESTSrvc.getPromise( {method: &#8216;GET&#8217;, url: RESTWebApp.appName + &#8216;\/tasks&#8217;, headers: {&#8216;Authorization&#8217; : baseAuthToken} });       }   } };  \/\/ resolving minification problems WorklistSrvc.$inject = [&#8216;RESTSrvc&#8217;]; servicesModule.factory(&#8216;WorklistSrvc&#8217;, WorklistSrvc); <\/p>\n<p>  MainCtrl \u2014 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<br \/>\n  MainCtrl.js&#8217;use strict&#8217;;  \/\/ Main controller \/\/ Controls the authentication. Loads all the worklists for user. function MainCtrl($scope, $location, $cookies, WorklistSrvc, SessionSrvc, UtilSrvc) {   $scope.page = {};   $scope.page.alerts = [];   $scope.utils = UtilSrvc;   $scope.page.loading = false;   $scope.page.loginState = $cookies[&#8216;Token&#8217;] ? 1 : 0;   $scope.page.authToken = $cookies[&#8216;Token&#8217;];    $scope.page.closeAlert = function(index) {            if ($scope.page.alerts.length) {      $(&#8216;.alert:nth-child(&#8216;+(index+1)+&#8217;)&#8217;).animate({opacity: 0, top: &quot;-=150&quot; }, 400, function() {         $scope.page.alerts.splice(index, 1); $scope.$apply();      });    }   };      $scope.page.addAlert = function(alert) {     $scope.page.alerts.push(alert);          if ($scope.page.alerts.length &gt; 5) {       $scope.page.closeAlert(0);       }     };      \/* Authentication section *\/   $scope.page.makeBaseAuth = function(user, password) {     var token = user + &#8216;:&#8217; + password;     var hash = Base64.encode(token);     return &quot;Basic &quot; + hash;   }         \/\/ login   $scope.page.doLogin = function(login, password) {     var authToken = $scope.page.makeBaseAuth(login, password);     $scope.page.loading = true;          WorklistSrvc.getAll(authToken).then(       function(data) {         $scope.page.alerts = [];         $scope.page.loginState = 1;          $scope.page.authToken = authToken;         \/\/ set cookie to restore loginState after page reload         $cookies[&#8216;User&#8217;] = login.toLowerCase();         $cookies[&#8216;Token&#8217;] = $scope.page.authToken;                         \/\/ refresh the data on page         $scope.page.loadSuccess(data);        },       function(data, status, headers, config) {         if (data.Error) {           $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: data.Error} );          }         else {           $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: &quot;Login unsuccessful&quot;} );         }     })     .then(function () { $scope.page.loading = false; })   };    \/\/ logout   $scope.page.doExit = function() {          SessionSrvc.logout($scope.page.authToken).then(       function(data) {         $scope.page.loginState = 0;           $scope.page.grid.items = null;         $scope.page.loading = false;         \/\/ clear cookies         delete $cookies[&#8216;User&#8217;];         delete $cookies[&#8216;Token&#8217;];         document.cookie = &quot;CacheBrowserId&quot; + &quot;=; Path=\/; expires=Thu, 01 Jan 1970 00:00:01 GMT;&quot;;         document.cookie = &quot;CSPSESSIONID&quot; + &quot;=; Path=&quot; + RESTWebApp.appName + &quot;; expires=Thu, 01 Jan 1970 00:00:01 GMT;&quot;;         document.cookie = &quot;CSPWSERVERID&quot; + &quot;=; Path=&quot; + RESTWebApp.appName + &quot;; expires=Thu, 01 Jan 1970 00:00:01 GMT;&quot;;         },      function(data, status, headers, config) {        $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: data.Error} );      });   };  }  \/\/ resolving minification problems MainCtrl.$inject = [&#8216;$scope&#8217;, &#8216;$location&#8217;, &#8216;$cookies&#8217;, &#8216;WorklistSrvc&#8217;, &#8216;SessionSrvc&#8217;, &#8216;UtilSrvc&#8217;]; controllersModule.controller(&#8216;MainCtrl&#8217;, MainCtrl); <\/p>\n<p>  TasksGridCtrl \u2014 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0439 \u0437\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043d\u0435\u0439. \u041e\u043d \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447 \u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f (\u043d\u0430\u0436\u0430\u0442\u0438\u0435 \u043a\u043d\u043e\u043f\u043e\u043a, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u044f).<br \/>\n  TasksGridCtrl.js&#8217;use strict&#8217;;  \/\/ TasksGrid controller \/\/ dependency injection function TasksGridCtrl($scope, $window, $modal, $cookies, WorklistSrvc) {      \/\/ Initialize grid.    \/\/ grid data:   \/\/ grid title, css grid class, column names   $scope.page.grid = {     caption: &#8216;Inbox Tasks&#8217;,     cssClass:&#8217;table table-condensed table-bordered table-hover&#8217;,     columns: [{name: &#187;, property: &#8216;New&#8217;, align: &#8216;center&#8217;},               {name: &#8216;Priority&#8217;, property: &#8216;Priority&#8217;},                {name: &#8216;Subject&#8217;, property: &#8216;Subject&#8217;},               {name: &#8216;Message&#8217;, property: &#8216;Message&#8217;},               {name: &#8216;Role&#8217;, property: &#8216;RoleName&#8217;},               {name: &#8216;Assigned To&#8217;, property: &#8216;AssignedTo&#8217;},               {name: &#8216;Time Created&#8217;, property: &#8216;TimeCreated&#8217;},               {name: &#8216;Age&#8217;, property: &#8216;Age&#8217;}]   };     \/\/ data initialization for Worklist   $scope.page.dataInit = function() {         if ($scope.page.loginState) {       $scope.page.loadTasks();     }   };    $scope.page.loadSuccess = function(data) {     $scope.page.grid.items = data.children;     \/\/ if we get data for other user &#8212; logout     if (!$scope.page.checkUserValidity()) {       $scope.page.doExit();       }          var date = new Date();      var hours = (date.getHours() &gt; 9) ? date.getHours() : &#8216;0&#8217; + date.getHours();     var minutes = (date.getMinutes() &gt; 9) ? date.getMinutes() : &#8216;0&#8217; + date.getMinutes();     var secs = (date.getSeconds() &gt; 9) ? date.getSeconds() : &#8216;0&#8217; + date.getSeconds();          $(&#8216;#updateTime&#8217;).animate({ opacity : 0 }, 100, function() { $(&#8216;#updateTime&#8217;).animate({ opacity : 1 }, 1000);} );            $scope.page.grid.updateTime = &#8216; [Last Update: &#8216; + hours;     $scope.page.grid.updateTime += &#8216;:&#8217; + minutes + &#8216;:&#8217; + secs + &#8216;]&#8217;;              };       \/\/ all user&#8217;s tasks loading   $scope.page.loadTasks = function() {    $scope.page.loading = true;        WorklistSrvc.getAll($scope.page.authToken).then(      function(data) {                          $scope.page.loadSuccess(data);      },      function(data, status, headers, config) {        $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: data.Error} );        })      .then(function () { $scope.page.loading = false; })        };         \/\/ load task (worklist) by id   $scope.page.loadTask = function(id) {     WorklistSrvc.get(id, $scope.page.authToken).then(       function(data) {         $scope.page.task = data;       },       function(data, status, headers, config) {         $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: data.Error} );         });          };       \/\/ &#8216;Accept&#8217; button handler.   \/\/ Send worklist object with &#8216;$Accept&#8217; action to server.   $scope.page.accept = function(id) {     \/\/ nothing to do, if no id     if (!id) return;          \/\/ get full worklist, set action and submit worklist.     WorklistSrvc.get(id).then(       function(data) {         data.Task[&quot;%Action&quot;] = &quot;$Accept&quot;;         $scope.page.submit(data);        },       function(data, status, headers, config) {         $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: data.Error} );       });   };        \/\/ &#8216;Yield&#8217; button handler.   \/\/ Send worklist object with &#8216;$Relinquish&#8217; action to server.   $scope.page.yield = function(id) {     \/\/ nothing to do, if no id     if (!id) return;          \/\/ get full worklist, set action and submit worklist.     WorklistSrvc.get(id).then(       function(data) {         data.Task[&quot;%Action&quot;] = &quot;$Relinquish&quot;;             $scope.page.submit(data);        },       function(data, status, headers, config) {         $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: data.Error} );             });   };        \/\/ submit the worklist object    $scope.page.submit = function(worklist) {     \/\/ send object to server. If ok, refresh data on page.     WorklistSrvc.save(worklist, $scope.page.authToken).then(       function(data) {           $scope.page.dataInit();           },       function(data, status, headers, config) {          $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: data.Error} );         }      );     };      \/* table section *\/      \/\/ sorting table   $scope.page.sort = function(property, isUp) {     $scope.page.predicate = property;      $scope.page.isUp = !isUp;     \/\/ change sorting icon     $scope.page.sortIcon = &#8216;fa fa-sort-&#8216; + ($scope.page.isUp ? &#8216;up&#8217;:&#8217;down&#8217;) + &#8216; pull-right&#8217;;       };        \/\/ selecting row in table   $scope.page.select = function(item) {     if ($scope.page.grid.selected) {       $scope.page.grid.selected.rowCss = &#187;;                if ($scope.page.grid.selected == item) {         $scope.page.grid.selected = null;         return;       }     }            $scope.page.grid.selected = item;     \/\/ change css class to highlight the row     $scope.page.grid.selected.rowCss = &#8216;info&#8217;;   };    \/\/ count currently displayed tasks   $scope.page.totalCnt =  function() {     return $window.document.getElementById(&#8216;tasksTable&#8217;).getElementsByTagName(&#8216;TR&#8217;).length &#8212; 2;   };      \/\/ if AssignedTo matches with current user &#8212; return &#8216;true&#8217;     $scope.page.isAssigned = function(selected) {     if (selected) {          if (selected.AssignedTo.toLowerCase() === $cookies[&#8216;User&#8217;].toLowerCase())         return true;     }         return false;   };      \/\/ watching for changes in &#8216;Search&#8217; input   \/\/ if there is change, reset the selection.     $scope.$watch(&#8216;query&#8217;, function() {     if ($scope.page.grid.selected) {       $scope.page.select($scope.page.grid.selected);       }   });    \/* modal window open *\/      $scope.page.modalOpen = function (size, id) {         \/\/ if no id &#8212; nothing to do     if (!id) return;            \/\/ obtainig the full object by id. If ok &#8212; open modal.     WorklistSrvc.get(id).then(       function(data) {         \/\/ see http:\/\/angular-ui.github.io\/bootstrap\/ for more options         var modalInstance = $modal.open({           templateUrl: &#8216;partials\/task.csp&#8217;,           controller: &#8216;TaskCtrl&#8217;,           size: size,           backdrop: true,           resolve: {                     task :  function() { return data; },                      submit: function() { return $scope.page.submit }                    }         });                  \/\/ onResult         modalInstance.result.then(           function (reason) {             if (reason === &#8216;save&#8217;) {               $scope.page.addAlert( {type: &#8216;success&#8217;, msg: &#8216;Task saved&#8217;} );                }           },            function () {});       },       function(data, status, headers, config) {         $scope.page.addAlert( {type: &#8216;danger&#8217;, msg: data.Error} );               });           };         \/*  User&#8217;s validity checking. *\/    \/\/ If we get the data for other user, logout immediately   $scope.page.checkUserValidity = function() {    var user = $cookies[&#8216;User&#8217;];        for (var i = 0; i &lt; $scope.page.grid.items.length; i++) {          if ($scope.page.grid.items[i].AssignedTo &#038;&#038; (user.toLowerCase() !== $scope.page.grid.items[i].AssignedTo.toLowerCase())) {          return false;      }      else if ($scope.page.grid.items[i].AssignedTo &#038;&#038; (user.toLowerCase() == $scope.page.grid.items[i].AssignedTo.toLowerCase())) {        return true;      }    }         return true;   };          \/\/ Check user&#8217;s validity every 10 minutes.   setInterval(function() { $scope.page.dataInit() }, 600000);     \/* Initialize *\/       \/\/ sort table (by Age, asc)   \/\/ to change sorting column change &#8216;columns[&lt;index&gt;]&#8217;   $scope.page.sort($scope.page.grid.columns[7].property, true);      $scope.page.dataInit();    }  \/\/ resolving minification problems TasksGridCtrl.$inject = [&#8216;$scope&#8217;, &#8216;$window&#8217;, &#8216;$modal&#8217;, &#8216;$cookies&#8217;, &#8216;WorklistSrvc&#8217;]; controllersModule.controller(&#8216;TasksGridCtrl&#8217;, TasksGridCtrl); <\/p>\n<p>  TaskCtrl \u2014 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0437\u0430\u0434\u0430\u0447\u0435. \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0435\u0439 \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0430 \u0442\u0430\u043a \u0436\u0435 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043a\u043d\u043e\u043f\u043e\u043a \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430.<br \/>\n  TaskCtrl.js&#8217;use strict&#8217;;  \/\/ Task controller \/\/ dependency injection function TaskCtrl($scope, $routeParams, $location, $modalInstance, WorklistSrvc, task, submit) {   $scope.page = { task:{} };   $scope.page.task = task;   $scope.page.actions = &quot;&quot;;   $scope.page.formFields = &quot;&quot;;   $scope.page.formValues = task.Task[&#8216;%FormValues&#8217;];      if (task.Task[&#8216;%TaskStatus&#8217;].Request[&#8216;%Actions&#8217;]) {     $scope.page.actions = task.Task[&#8216;%TaskStatus&#8217;].Request[&#8216;%Actions&#8217;].split(&#8216;,&#8217;);   }      if (task.Task[&#8216;%TaskStatus&#8217;].Request[&#8216;%FormFields&#8217;]) {     $scope.page.formFields = task.Task[&#8216;%TaskStatus&#8217;].Request[&#8216;%FormFields&#8217;].split(&#8216;,&#8217;);   }      \/\/ dismiss modal    $scope.page.cancel = function () {     $modalInstance.dismiss(&#8216;cancel&#8217;);   };      \/\/ perform a specified action   $scope.page.doAction = function(action) {     $scope.page.task.Task[&quot;%Action&quot;] = action;       $scope.page.task.Task[&#8216;%FormValues&#8217;] = $scope.page.formValues;      submit($scope.page.task);      $modalInstance.close(action);   }  }  \/\/ resolving minification problems TaskCtrl.$inject = [&#8216;$scope&#8217;, &#8216;$routeParams&#8217;, &#8216;$location&#8217;, &#8216;$modalInstance&#8217;, &#8216;WorklistSrvc&#8217;, &#8216;task&#8217;, &#8216;submit&#8217;]; controllersModule.controller(&#8216;TaskCtrl&#8217;, TaskCtrl); <\/p>\n<p>  app.js \u2014 \u0444\u0430\u0439\u043b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0432\u0441\u0435 \u043c\u043e\u0434\u0443\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>\n  app.js&#8217;use strict&#8217;; \/* Adding routes(when). [route], {[template path for ng-view], [controller for this template]}  otherwise Set default route.  $routeParams.id &#8212; :id parameter. *\/  var servicesModule    = angular.module(&#8216;servicesModule&#8217;,[]); var controllersModule = angular.module(&#8216;controllersModule&#8217;, []); var app = angular.module(&#8216;app&#8217;, [&#8216;ngRoute&#8217;, &#8216;ngCookies&#8217;, &#8216;ui.bootstrap&#8217;, &#8216;servicesModule&#8217;, &#8216;controllersModule&#8217;]);  app.config([ &#8216;$routeProvider&#8217;, function( $routeProvider ) {   $routeProvider.when( &#8216;\/tasks&#8217;,     {templateUrl: &#8216;partials\/tasks.csp&#8217;} );   $routeProvider.when( &#8216;\/tasks\/:id&#8217;, {templateUrl: &#8216;partials\/task.csp&#8217;,  controller: &#8216;TaskCtrl&#8217;} );        $routeProvider.otherwise( {redirectTo: &#8216;\/tasks&#8217;} ); }]); <\/p>\n<p>  index.csp \u2014 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<br \/>\n  index.csp&lt;!doctype html&gt;  &lt;html&gt;   &lt;head&gt;     &lt;title&gt;Ensemble Workflow&lt;\/title&gt;          &lt;meta charset=&quot;utf-8&quot;&gt;     &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge&quot;&gt;     &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1, maximum-scale=1&quot;&gt;          &lt;!&#8212; CSS Initialization &#8212;&gt;     &lt;link rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; href=&quot;css\/bootstrap.min.css&quot;&gt;     &lt;link rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; href=&quot;css\/font-awesome.min.css&quot;&gt;     &lt;link rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; href=&quot;css\/bootstrap-theme.min.css&quot;&gt;     &lt;link rel=&quot;stylesheet&quot; type=&quot;text\/css&quot; href=&quot;css\/custom.css&quot;&gt;      &lt;script language=&quot;javascript&quot;&gt;         \/\/ REST web-app name, global variable         var RESTWebApp = {appName: &#8216;#($GET(^Settings(&quot;WF&quot;, &quot;WebAppName&quot;)))#&#8217;};   &lt;\/script&gt;   &lt;\/head&gt;      &lt;body ng-app=&quot;app&quot; ng-controller=&quot;MainCtrl&quot;&gt;          &lt;nav class=&quot;navbar navbar-default navbar-fixed-top&quot;&gt;            &lt;div class=&quot;container-fluid&quot;&gt;                 &lt;div class=&quot;navbar-header&quot;&gt;              &lt;a class=&quot;navbar-brand&quot; href=&quot;#&quot;&gt;Ensemble Workflow&lt;\/a&gt;           &lt;\/div&gt;                      &lt;div class=&quot;navbar-left&quot;&gt;             &lt;button ng-cloak ng-disabled=&quot;page.loginState != 1 || page.loading&quot; type=&quot;button&quot; class=&quot;btn btn-default navbar-btn&quot;                      ng-click=&quot;page.dataInit();&quot;&gt;Refresh Worklist&lt;\/button&gt;           &lt;\/div&gt;                        &lt;div class=&quot;navbar-left&quot;&gt;             &lt;form role=&quot;search&quot; class=&quot;navbar-form&quot;&gt;               &lt;div class=&quot;form-group form-inline&quot;&gt;                 &lt;label for=&quot;search&quot; class=&quot;sr-only&quot;&gt;Search&lt;\/label&gt;                 &lt;input ng-cloak ng-disabled=&quot;page.loginState != 1&quot; type=&quot;text&quot; class=&quot;form-control&quot;                         placeholder=&quot;Search&quot; id=&quot;search&quot; ng-model=&quot;query&quot;&gt;               &lt;\/div&gt;             &lt;\/form&gt;           &lt;\/div&gt;                        &lt;div class=&quot;navbar-right&quot;&gt;             &lt;form role=&quot;form&quot; class=&quot;navbar-form form-inline&quot; ng-show=&quot;page.loginState != 1&quot; ng-model=&quot;user&quot;                   ng-submit=&quot;page.doLogin(user.Login, user.PasswordSetter); user=&#187;;&quot; ng-cloak&gt;                &lt;div class=&quot;form-group&quot;&gt;                  &lt;input class=&quot;form-control uc-inline&quot; ng-model=&quot;user.Login&quot; placeholder=&quot;Username&quot; ng-disabled=&quot;page.loading&quot;&gt;                 &lt;input type=&quot;password&quot; class=&quot;form-control uc-inline&quot; ng-model=&quot;user.PasswordSetter&quot;                          placeholder=&quot;Password&quot; ng-disabled=&quot;page.loading&quot;&gt;                 &lt;button type=&quot;submit&quot; class=&quot;btn btn-default&quot; ng-disabled=&quot;page.loading&quot;&gt;Sign In&lt;\/button&gt;               &lt;\/div&gt;             &lt;\/form&gt;           &lt;\/div&gt;                       &lt;button ng-show=&quot;page.loginState == 1&quot; type=&quot;button&quot; ng-click=&quot;page.doExit();&quot; class=&quot;btn navbar-btn btn-default pull-right&quot; ng-cloak&gt;Logout,              &lt;span class=&quot;label label-info&quot; ng-bind=&quot;utils.readCookie(&#8216;User&#8217;)&quot;&gt;&lt;\/span&gt;           &lt;\/button&gt;                    &lt;\/div&gt;       &lt;\/nav&gt;                 &lt;div class=&quot;container-fluid&quot;&gt;                   &lt;div style=&quot;height: 20px;&quot;&gt;           &lt;div ng-show=&quot;page.loading&quot; class=&quot;progress-bar progress-bar-striped progress-condensed active&quot; role=&quot;progressbar&quot;                 aria-valuenow=&quot;100&quot; aria-valuemin=&quot;0&quot; aria-valuemax=&quot;100&quot; style=&quot;width: 100%&quot; ng-cloak&gt;                Loading           &lt;\/div&gt;         &lt;\/div&gt;                  &lt;!&#8212; Alerts &#8212;&gt;         &lt;div ng-controller=&quot;AlertController&quot; ng-cloak&gt;             &lt;alert title=&quot;Click to dismiss&quot; ng-repeat=&quot;alert in page.alerts&quot; type=&quot;{{alert.type}}&quot; ng-click=&quot;page.closeAlert($index, alert)&quot;&gt;{{alert.msg}}&lt;\/alert&gt;         &lt;\/div&gt;                   &lt;div ng-show=&quot;page.loginState != 1&quot; class=&quot;attention&quot; ng-cloak&gt;           &lt;p&gt;Please, Log In first.&lt;\/p&gt;         &lt;\/div&gt;                &lt;!&#8212; Loading template &#8212;&gt;         &lt;div ng-view&gt;         &lt;\/div&gt;       &lt;\/div&gt;              &lt;\/div&gt;          &lt;!&#8212; Hooking scripts &#8212;&gt;       &lt;script language=&quot;javascript&quot; src=&quot;libs\/angular.min.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;libs\/angular-route.min.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;libs\/angular-cookies.min.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;libs\/ui-bootstrap-custom-tpls-0.12.0.min.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;libs\/base64.js&quot;&gt;&lt;\/script&gt;          &lt;script language=&quot;javascript&quot; src=&quot;js\/app.js&quot;&gt;&lt;\/script&gt;      &lt;script language=&quot;javascript&quot; src=&quot;js\/services\/RESTSrvc.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;js\/services\/WorklistSrvc.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;js\/services\/SessionSrvc.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;js\/services\/UtilSrvc.js&quot;&gt;&lt;\/script&gt;          &lt;script language=&quot;javascript&quot; src=&quot;js\/controllers\/MainCtrl.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;js\/controllers\/TaskCtrl.js&quot;&gt;&lt;\/script&gt;     &lt;script language=&quot;javascript&quot; src=&quot;js\/controllers\/TasksGridCtrl.js&quot;&gt;&lt;\/script&gt;          &lt;script language=&quot;javascript&quot; src=&quot;libs\/jquery-1.11.2.min.js&quot;&gt;&lt;\/script&gt;       &lt;script language=&quot;javascript&quot; src=&quot;libs\/bootstrap.min.js&quot;&gt;&lt;\/script&gt;        &lt;\/body&gt; &lt;\/html&gt; <\/p>\n<p>  tasks.csp \u2014 \u0448\u0430\u0431\u043b\u043e\u043d \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u043f\u0438\u0441\u043a\u0430 \u0437\u0430\u0434\u0430\u0447.<br \/>\n  tasks.csp&lt;div class=&quot;row-fluid&quot;&gt;   &lt;div class=&quot;span1&quot;&gt;   &lt;\/div&gt;      &lt;div ng-hide=&quot;page.loginState != 1 || (page.loading &#038;&#038; !page.totalCnt())&quot; ng-controller=&quot;TasksGridCtrl&quot;&gt;       &lt;div class=&quot;panel panel-default top-buffer&quot;&gt;       &lt;table class=&quot;table-tasks&quot; ng-class=&quot;page.grid.cssClass&quot; id=&quot;tasksTable&quot;&gt;         &lt;caption class=&quot;text-left&quot;&gt;           &lt;b ng-bind=&quot;page.grid.caption&quot;&gt;&lt;\/b&gt;&lt;b id=&quot;updateTime&quot; ng-bind=&quot;page.grid.updateTime&quot;&gt;&lt;\/b&gt;         &lt;\/caption&gt;         &lt;thead style=&quot;cursor: pointer; vertical-align: middle;&quot;&gt;           &lt;tr&gt;             &lt;th class=&quot;text-center&quot;&gt;#&lt;\/th&gt;             &lt;!&#8212; In the cycle prints the name of the column, specify for each column click handler and the icon (sorting) &#8212;&gt;             &lt;th ng-repeat=&quot;column in page.grid.columns&quot; class=&quot;text-center&quot; ng-click=&quot;page.sort(column.property, page.isUp)&quot;&gt;               &lt;span ng-bind=&quot;column.name&quot; style=&quot;padding-right: 4px;&quot;&gt;&lt;\/span&gt;               &lt;i style=&quot;margin-top: 3px;&quot; ng-class=&quot;page.sortIcon&quot; ng-show=&quot;column.property == page.predicate&quot;&gt;&lt;\/i&gt;                  &lt;i style=&quot;color: #ccc; margin-top: 3px;&quot; class=&quot;fa fa-sort pull-right&quot; ng-show=&quot;column.property != page.predicate&quot;&gt;&lt;\/i&gt;              &lt;\/th&gt;             &lt;th class=&quot;text-center&quot;&gt;Action&lt;\/th&gt;           &lt;\/tr&gt;         &lt;\/thead&gt;         &lt;tfoot&gt;           &lt;tr&gt;             &lt;!&#8212; Control buttons and messages &#8212;&gt;             &lt;td colspan=&quot;{{page.grid.columns.length + 2}}&quot;&gt;               &lt;p ng-hide=&quot;page.grid.items.length&quot;&gt;There is no task(s) for current user.&lt;\/p&gt;               &lt;span ng-show=&quot;page.grid.items.length&quot;&gt;                 Showing {{page.totalCnt()}} of {{page.grid.items.length}} task(s).               &lt;\/span&gt;              &lt;\/td&gt;           &lt;\/tr&gt;            &lt;\/tfoot&gt;         &lt;tbody style=&quot;cursor: default;&quot;&gt;           &lt;!&#8212; In the cycle prints the table rows (sort by specified column) &#8212;&gt;           &lt;tr ng-repeat=&quot;item in page.grid.items | orderBy:page.predicate:page.isUp | filter:query&quot; ng-class=&quot;item.rowCss&quot; &gt;             &lt;td ng-bind=&quot;$index + 1&quot; class=&quot;text-right&quot;&gt;&lt;\/td&gt;                 &lt;!&#8212; In the cycle prints the table cells to each row &#8212;&gt;             &lt;td ng-repeat=&quot;column in page.grid.columns&quot; style=&quot;text-align: {{column.align}};&quot; ng-click=&quot;page.select(item)&quot;&gt;               &lt;span class=&quot;label label-info&quot; ng-show=&quot;$first &#038;&#038; item.New&quot;&gt;New&lt;\/span&gt;               &lt;span ng-hide=&quot;$first&quot; ng-bind=&quot;utils.getPropertyValue(item, column.property)&quot;&gt;&lt;\/span&gt;                  &lt;\/td&gt;             &lt;td class=&quot;text-center&quot;&gt;               &lt;div title=&quot;Accept task&quot; class=&quot;button button-success fa fa-plus-circle&quot; ng-click=&quot;page.accept(item.ID)&quot;   ng-show=&quot;!page.isAssigned(item)&quot;&gt;&lt;\/div&gt;               &lt;div title=&quot;Details&quot; class=&quot;button button-info fa fa-search&quot;  ng-click=&quot;page.modalOpen(&#8216;lg&#8217;, item.ID)&quot; ng-show=&quot;page.isAssigned(item)&quot;&gt;&lt;\/div&gt;               &lt;div title=&quot;Yield task&quot; class=&quot;button button-danger fa fa-minus-circle&quot;  ng-click=&quot;page.yield(item.ID)&quot; ng-show=&quot;page.isAssigned(item)&quot;&gt;&lt;\/div&gt;             &lt;\/td&gt;           &lt;\/tr&gt;         &lt;\/tbody&gt;       &lt;\/table&gt;     &lt;\/div&gt;   &lt;\/div&gt;   &lt;div class=&quot;span1&quot;&gt;   &lt;\/div&gt; &lt;\/div&gt; &lt;br&gt; <\/p>\n<p>  task.csp \u2014 \u0448\u0430\u0431\u043b\u043e\u043d \u043c\u043e\u0434\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043e\u043a\u043d\u0430.<br \/>\n  task.csp  &lt;div class=&quot;modal-header&quot;&gt;       &lt;h3 class=&quot;modal-title&quot;&gt;Task description&lt;\/h3&gt;   &lt;\/div&gt;      &lt;div class=&quot;modal-body&quot;&gt;     &lt;div class=&quot;container-fluid&quot;&gt;                  &lt;div class=&quot;row top-buffer&quot;&gt;          &lt;div class=&quot;col-xs-12 col-md-6&quot;&gt;           &lt;div class=&quot;form-group&quot;&gt;             &lt;label for=&quot;subject&quot;&gt;Subject&lt;\/label&gt;             &lt;input id=&quot;subject&quot; type=&quot;text&quot; class=&quot;form-control task-info-input&quot; ng-model=&quot;page.task.Task[&#8216;%TaskStatus&#8217;].Request[&#8216;%Subject&#8217;];&quot; readonly&gt;           &lt;\/div&gt;         &lt;\/div&gt;         &lt;div class=&quot;col-md-6&quot;&gt;           &lt;div class=&quot;form-group&quot;&gt;             &lt;label for=&quot;timeCreated&quot;&gt;Time created&lt;\/label&gt;             &lt;input id=&quot;timeCreated&quot; type=&quot;text&quot; class=&quot;form-control task-info-input&quot; ng-model=&quot;page.task.Task[&#8216;%TaskStatus&#8217;].TimeCreated;&quot; readonly&gt;           &lt;\/div&gt;         &lt;\/div&gt;        &lt;\/div&gt;                  &lt;div class=&quot;row&quot;&gt;          &lt;div class=&quot;col-md-12&quot;&gt;           &lt;div class=&quot;form-group&quot;&gt;             &lt;label for=&quot;message&quot;&gt;Message&lt;\/label&gt;             &lt;textarea id=&quot;message&quot; class=&quot;form-control task-info-input&quot; ng-model=&quot;page.task.Task[&#8216;%TaskStatus&#8217;].Request[&#8216;%Message&#8217;];&quot; rows=&quot;3&quot; readonly&gt;&lt;\/textarea&gt;           &lt;\/div&gt;         &lt;\/div&gt;       &lt;\/div&gt;                  &lt;div class=&quot;row&quot;&gt;          &lt;div class=&quot;col-md-6&quot;&gt;           &lt;div class=&quot;form-group&quot;&gt;             &lt;label for=&quot;role&quot;&gt;Role&lt;\/label&gt;             &lt;input id=&quot;role&quot; type=&quot;text&quot; class=&quot;form-control task-info-input&quot; ng-model=&quot;page.task.Task[&#8216;%TaskStatus&#8217;].Role.Name;&quot; readonly&gt;           &lt;\/div&gt;         &lt;\/div&gt;                      &lt;div class=&quot;col-md-3&quot;&gt;           &lt;div class=&quot;form-group&quot;&gt;             &lt;label for=&quot;assignedTo&quot;&gt;Assigned to&lt;\/label&gt;             &lt;input id=&quot;assignedTo&quot; type=&quot;text&quot; class=&quot;form-control task-info-input&quot; ng-model=&quot;page.task.Task[&#8216;%TaskStatus&#8217;].AssignedTo;&quot; readonly&gt;           &lt;\/div&gt;         &lt;\/div&gt;                   &lt;div class=&quot;col-md-3&quot;&gt;           &lt;div class=&quot;form-group&quot;&gt;             &lt;label for=&quot;priority&quot;&gt;Priority&lt;\/label&gt;             &lt;input id=&quot;priority&quot; type=&quot;text&quot; class=&quot;form-control task-info-input&quot; ng-model=&quot;page.task.Task[&#8216;%Priority&#8217;];&quot; readonly&gt;           &lt;\/div&gt;         &lt;\/div&gt;                           &lt;\/div&gt;              &lt;div class=&quot;row&quot; ng-show=&quot;page.formFields&quot;&gt;          &lt;div class=&quot;delimeter col-md-6 el-centered&quot;&gt;         &lt;\/div&gt;       &lt;\/div&gt;                &lt;div class=&quot;row&quot; ng-repeat=&quot;formField in page.formFields&quot;&gt;          &lt;div class=&quot;col-md-12&quot;&gt;           &lt;div class=&quot;form-group&quot;&gt;             &lt;label for=&quot;form{{$index}}&quot; ng-bind=&quot;formField&quot;&gt;&lt;\/label&gt;             &lt;input id=&quot;form{{$index}}&quot; type=&quot;text&quot; class=&quot;form-control task-info-input&quot; ng-model=&quot;page.formValues[formField]&quot;&gt;           &lt;\/div&gt;         &lt;\/div&gt;       &lt;\/div&gt;                             &lt;\/div&gt;          &lt;\/div&gt;      &lt;div class=&quot;modal-footer&quot;&gt;       &lt;button ng-repeat=&quot;action in page.actions&quot; class=&quot;btn btn-primary top-buffer&quot; ng-click=&quot;page.doAction(action)&quot; ng-bind=&quot;action&quot;&gt;&lt;\/button&gt;            &lt;button class=&quot;btn btn-success top-buffer&quot; ng-click=&quot;page.doAction(&#8216;$Save&#8217;)&quot;&gt;Save&lt;\/button&gt;       &lt;button class=&quot;btn btn-warning top-buffer&quot; ng-click=&quot;page.cancel()&quot;&gt;Cancel&lt;\/button&gt;      &lt;\/div&gt; <\/p>\n<p>  \u0422\u0430\u043a \u0436\u0435, \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0437\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448 REST API \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e UI, \u0442\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043e\u043d \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442.<br \/>\n  URL map \u043d\u0430\u0448\u0435\u0433\u043e REST API&lt;Routes&gt; &lt;Route Url=&quot;\/logout&quot; Method=&quot;GET&quot; Call=&quot;Logout&quot;\/&gt; &lt;Route Url=&quot;\/tasks&quot; Method=&quot;GET&quot; Call=&quot;GetTasks&quot;\/&gt; &lt;Route Url=&quot;\/tasks\/:id&quot; Method=&quot;GET&quot; Call=&quot;GetTask&quot;\/&gt; &lt;Route Url=&quot;\/tasks\/:id&quot; Method=&quot;POST&quot; Call=&quot;PostTask&quot;\/&gt; &lt;Route Url=&quot;\/test&quot; Method=&quot;GET&quot; Call=&quot;Test&quot;\/&gt; &lt;\/Routes&gt; <\/p>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 HelpDesk. Login: dev \/ Pass: 123      \t \t   \thttp:\/\/habrahabr.ru\/post\/251611\/<\/p>\n","protected":false},"excerpt":{"rendered":"\n<p>  \u0422\u0435, \u043a\u0442\u043e \u0437\u043d\u0430\u043a\u043e\u043c \u0441 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 InterSystems Ensemble, \u0437\u043d\u0430\u044e\u0442, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Ensemble Workflow \u0438 \u043a\u0430\u043a \u043e\u043d\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043b\u044e\u0434\u0435\u0439. \u0414\u043b\u044f \u0442\u0435\u0445 \u0436\u0435, \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u043a\u043e\u043c \u0441 Ensemble (\u0438\/\u0438\u043b\u0438 Workflow), \u044f \u043a\u0440\u0430\u0442\u043a\u043e \u043e\u043f\u0438\u0448\u0443 \u0435\u0451 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 (\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0443 \u0447\u0430\u0441\u0442\u044c \u0438 \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Workflow \u043d\u0430 Angular.js).<\/p>\n<p>  InterSystems Ensemble<br \/>\n  \u041f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 InterSystems Ensemble \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u043e\u0437\u043d\u0435\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0442\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u043e\u0432\u043e\u0439 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0438\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c. Ensemble \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u0447: EAI, SOA, BPM, BAM \u0438 \u0434\u0430\u0436\u0435 BI (\u0437\u0430 \u0441\u0447\u0435\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 InterSystems DeepSee).<\/p>\n<p>  \u0412 Ensemble \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<br \/>\n    \u0410\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438, \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044f\u043c\u0438 \u0438 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 Ensemble \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b (Web- \u0438 Rest- \u0441\u0435\u0440\u0432\u0438\u0441\u044b, File, FTP, Email, SQL, EDI, HL7, SAP, Siebel, 1C \u041f\u0440\u0435\u0434\u043f\u0440\u0438\u044f\u0442\u0438\u0435 \u0438 \u0442.\u0434.). \u041c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Adapter SDK.  \u0411\u0438\u0437\u043d\u0435\u0441-\u0441\u043b\u0443\u0436\u0431\u044b \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u044e\u0449\u0438\u0435 \u043e\u0442 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f Ensemble, \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438\/\u0438\u043b\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.  \u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u2013 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u043b\u044f \u043e\u0440\u043a\u0435\u0441\u0442\u0440\u043e\u0432\u043a\u0438 \u0441\u043b\u0443\u0436\u0431 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0435\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c \u0438\/\u0438\u043b\u0438 \u043b\u044e\u0434\u0435\u0439 (\u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 Workflow). \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u043b\u0438\u0431\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u043c \u044f\u0437\u044b\u043a\u0435 Business Process Language, \u043b\u0438\u0431\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u044e\u0442\u0441\u044f \u043d\u0430 Cach\u00e9 Object Script. \u041b\u043e\u0433\u0438\u043a\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0441 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u043c\u0438\u0440\u043e\u043c \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0430 \u043e\u0442 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0443\u0436\u0431 \u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439.  \u0411\u0438\u0437\u043d\u0435\u0441-\u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\/\u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432\u043d\u0435\u0448\u043d\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 Ensemble \u0432 \u0444\u043e\u0440\u043c\u0430\u0442, \u043f\u0440\u0438\u0433\u043e\u0434\u043d\u044b\u0439 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0432\u043e \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b.   \u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b Ensemble \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439. \u0414\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u044f\u0437\u044b\u043a Data Transformation Language.  \u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u2013 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430\u043c \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 Ensemble \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u0445 \u0442\u043e\u0447\u043a\u0430\u0445 \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439.  \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u2013 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Ensemble Workflow \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447 \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438.  \u0411\u0438\u0437\u043d\u0435\u0441-\u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u2013 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0442\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0430\u043d\u0435\u043b\u044f\u043c\u0438 (Dashboards) \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0443 \u0431\u0438\u0437\u043d\u0435\u0441-\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 (Business Activity Monitoring, BAM).    <\/p>\n<p>  \u0412\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Ensemble Workflow \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e. <\/p>\n<p>  \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 Ensemble Workflow<br \/>\n  \u0421\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044e Workflow Management Coalition (www.WfMC.org), \u201c\u043f\u043e\u0442\u043e\u043a\u0438 \u0440\u0430\u0431\u043e\u0442 (Workflow) \u2014 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0438\u0437\u043d\u0435\u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u043b\u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b, \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0445 \u043f\u0440\u0430\u0432\u0438\u043b.\u201d<\/p>\n<p>  \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b Workflow:<br \/>\n    \u0417\u0430\u0434\u0430\u0447\u0430 Workflow \u2014 \u00ab\u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u00bb \u0440\u0430\u0431\u043e\u0442\u044b  \u041f\u043e\u0442\u043e\u043a \u0440\u0430\u0431\u043e\u0442 \u2014 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043d\u044b\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0437\u0430\u0434\u0430\u0447  \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c Workflow \u2014 \u0447\u0435\u043b\u043e\u0432\u0435\u043a, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435   \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442  \u0420\u043e\u043b\u044c Workflow \u2014 \u0433\u0440\u0443\u043f\u043f\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442   \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0437\u0430\u0434\u0430\u0447.   <\/p>\n<p>  \u041f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0432 Ensemble \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442:<br \/>\n    \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b Ensemble  \u0413\u0438\u0431\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442  \u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0447\u0435\u0440\u0435\u0437 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 Workflow-\u043f\u043e\u0440\u0442\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Ensemble  \u041e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u0441 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u043c\u0438 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 Ensemble  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 Ensemble  \u041b\u0435\u0433\u043a\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b Workflow  <\/p>\n<p>  \u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 Ensemble HelpDesk \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0441\u043b\u0443\u0436\u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432\u0445\u043e\u0434\u0438\u0442 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043f\u043e\u0441\u0442\u0430\u0432\u043a\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 Ensemble \u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 Ensdemo. Ensemble \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 HelpDesk.<\/p>\n<p>  \u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 HelpDesk<\/p>\n<p>  \u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0440\u043e\u043b\u0438 Demo-Development \u0437\u0430\u0434\u0430\u0447\u0443 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430 EnsLib.Workflow.TaskRequest, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u201c\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e\u201d \u0438\u043b\u0438 \u201c\u041f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e\u201d), \u0430 \u0442\u0430\u043a \u0436\u0435 \u043f\u043e\u043b\u0435 \u201c\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439\u201d. \u0412 \u0442\u0435\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0442\u0430\u043a\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435, \u0441\u043e\u043e\u0431\u0449\u0438\u0432\u0448\u0435\u043c \u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432 Workflow-\u043f\u043e\u0440\u0442\u0430\u043b\u0435 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0440\u043e\u043b\u0438 Demo-Development \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e (\u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u0434\u0430\u043d\u043e \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 TaskRequest) \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0430\u0441\u0441\u043e\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c (\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0440\u043e\u043b\u044c\u044e), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0443\u0436\u043d\u043e \u0435\u0435 \u043f\u0440\u0438\u043d\u044f\u0442\u044c, \u043d\u0430\u0436\u0430\u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u043a\u043d\u043e\u043f\u043a\u0443. \u0422\u0430\u043a \u0436\u0435 \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438, \u043d\u0430\u0436\u0430\u0432 \u043a\u043d\u043e\u043f\u043a\u0443 \u201c\u0423\u0441\u0442\u0443\u043f\u0438\u0442\u044c\u201d.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u201c\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e\u201d, \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u043f\u043e\u043b\u0435. \u0411\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441 HelpDesk \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u044d\u0442\u043e \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442 \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0440\u043e\u043b\u0438 Demo-Testing, \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439. \u0415\u0441\u043b\u0438 \u043d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u201c\u041f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e\u201d, \u0442\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u0447\u0435\u043d\u0430 \u043a\u0430\u043a \u201cNot a problem\u201d \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u0441\u044f.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430, Ensemble Workflow<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-252170","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/252170","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=252170"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/252170\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=252170"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=252170"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=252170"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}