{"id":173059,"date":"2013-03-17T03:03:03","date_gmt":"2013-03-16T23:03:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=173059"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=173059","title":{"rendered":"<span class=\"post_title\">Oracle ADF. Business Components<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0414\u043e\u0431\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0442\u043e\u043a \u0445\u0430\u0431\u0440\u0430\u0432\u0447\u0430\u043d\u0435. \u041c\u043e\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0438\u043d\u0442\u0440\u043e \u0432 ADF. \u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043e\u043f\u0440\u043e\u0441\u0430 \u044f \u0432\u0438\u0436\u0443, \u0447\u0442\u043e \u0442\u0435\u043c\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u0442\u043e \u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431 ADF.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430 \u043e \u0434\u0430\u043d\u043d\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u00ab\u0440\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0431\u043e\u0439\u00bb \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0444\u0438\u0447\u0438 ADF \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0431 ADF Business Components. \u041e \u0442\u043e\u043c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<h4>\u041e\u0431\u0449\u0438\u0435 \u043f\u043e\u043d\u044f\u0442\u0438\u044f<\/h4>\n<p>  ADF Business Components (\u0434\u0430\u043b\u0435\u0435 BC) \u2013 \u044d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0411\u0414, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0430\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443. \u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f BC \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 XML \u0444\u0430\u0439\u043b\u0430\u0445, \u043d\u043e \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c Java \u043a\u043b\u0430\u0441\u0441\u044b \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\/\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443.<br \/>  BC \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 5 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439:  <\/p>\n<ul>\n<li>Entity Objects (EO)<\/li>\n<li>View Objects (VO)<\/li>\n<li>Associations<\/li>\n<li>View Links<\/li>\n<li>Application Module<\/li>\n<\/ul>\n<p>  EO \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437 \u0411\u0414, \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 EO \u2013 \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b.<br \/>  \u0414\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0438 \u043b\u043e\u0433\u0438\u043a\u0443 \u043f\u0435\u0440\u0441\u0438\u0441\u0442\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p>  EO associations \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438 (\u0442\u0430\u0431\u043b\u0438\u0446\u0430\u043c\u0438)<\/p>\n<p>  VO \u2013 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442, \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0437\u0430 \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 data source, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0438\u0445 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044e.<\/p>\n<p>  View Links \u2013 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 VO (\u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441 associations)<\/p>\n<p>  Application Module \u2013 \u044d\u0442\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0431\u0438\u0437\u043d\u0435\u0441 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 (\u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u0441 VO \u0438 View Links). \u0422\u0430\u043a\u0436\u0435 \u0432 \u043d\u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0438 \u0432\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 Application Modules. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0441\u0447\u0435\u0442\u0435 Application Module \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u0430\u043a Data Control.<\/p>\n<h4>IDE time<\/h4>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0411\u0414 \u0434\u0430\u043d\u043d\u044b\u0445 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c employees \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438\u0437 oracle <a href=\"http:\/\/docs.oracle.com\/cd\/B13789_01\/server.101\/b10771\/scripts003.htm\">HR \u0441\u0445\u0435\u043c\u044b<\/a>.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0438\u0437\u0430\u0440\u0434\u0430 \u00abBusiness Components from tables\u00bb, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u0444\u0430\u0439\u043b\u043e\u0432.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/55b\/cba\/e29\/55bcbae2950f570dc4dfc39a99a03504.jpg\"\/><\/p>\n<p>  \u0417\u0434\u0435\u0441\u044c Employees \u2013 EO, EmployeesView \u2013 VO, EmployeesAppModule \u2013 Application Module, EmpManagerFkAssoc \u2013 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u0430\u043c\u0438 \u0438 \u0438\u0445 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c\u0438, EmpManagerFkLink \u2013 View link \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438, \u043d\u043e \u0434\u043b\u044f VO, Business Components Diagram \u2014 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u0410 \u043d\u0430 \u043f\u0430\u043d\u0435\u043b\u0438 Data Controls \u0441\u043e\u0437\u0434\u0430\u0441\u0442\u0441\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 data control.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/332\/438\/a94\/332438a947a4ac84aad1026c62cefa41.jpg\"\/><\/p>\n<p>  \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/38e\/9b1\/31c\/38e9b131c97e70d1b16f091b47a423f2.jpg\"\/><br \/>  \u041c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e EmployeesView \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Employees EO. \u0410 \u0432 ApplicationModule \u043f\u043e\u043f\u0430\u043b\u0438 \u0434\u0432\u0430 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430 EmployeesView. \u041e\u0434\u0438\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>  \u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0431\u0437\u043e\u0440 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  <b>Employees<\/b><\/p>\n<p>  \u0412 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c EO \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043a\u0430\u043a\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432 \u043d\u0435\u0433\u043e \u0432\u0445\u043e\u0434\u044f\u0442, \u043e\u0442\u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0438\u043b\u0438 \u0443\u0434\u0430\u043b\u0438\u0442\u044c.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/0d2\/085\/9f4\/0d20859f4e9676740c5ed8ef5d85ab03.jpg\"\/><\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/0bd\/b1e\/0b6\/0bdb1e0b6e4e04bee600e54d971a58b6.jpg\"\/><\/p>\n<p>  <b>EmployeesView<\/b><\/p>\n<p>  \u0418\u0437 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 VO \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 Employees EO.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/09f\/e41\/025\/09fe410259926f3bb191427d0effe7bc.jpg\"\/><\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 VO, \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u0438 (named where clauses)<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/296\/e30\/764\/296e30764edf559945a4b51e19925966.jpg\"\/><\/p>\n<p>  <b>EmployeesAppModule<\/b><\/p>\n<p>  Application Module, \u043a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0435\u043b\u0438 \u0440\u0430\u043d\u044c\u0448\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0430 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430 EmployeesView<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/fd3\/91b\/4dc\/fd391b4dc56ffc158208f11dc8ce4732.jpg\"\/><\/p>\n<p>  <b>EmpManagerFkAssoc<\/b><\/p>\n<p>  \u0421\u0432\u044f\u0437\u044c \u043c\u0435\u0436\u0434\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/d4d\/a6e\/9f2\/d4da6e9f26eec31f4c2020aadb2de903.jpg\"\/><\/p>\n<p>  <b>EmpManagerFkLink<\/b><\/p>\n<p>  \u041e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0435 Source \u0438 Destination, \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u043e \u0442\u043e\u043c, \u0447\u0442\u043e View Link \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043d\u0430 \u0431\u0430\u0437\u0435 Associations.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/46d\/ea5\/7bb\/46dea57bbc95ab8654a9a107b404de9e.jpg\"\/><\/p>\n<h4>CRUD<\/h4>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/2f2\/948\/260\/2f2948260fc437ce6639474d72f27e93.jpg\"\/><br \/>  \u0414\u0430-\u0434\u0430. CRUD \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c, \u043c\u043d\u043e\u044e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043a\u0430\u043a\u043e\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<br \/>  \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c\u0438.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/5e3\/15c\/528\/5e315c52899e96145ec197414204a122.jpg\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 Create employee, \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/9e8\/ab3\/534\/9e8ab3534dc089bf196109aa7e8d9225.jpg\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 Save \u043d\u043e\u0432\u044b\u0439 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u0441\u044f \u0432 \u0411\u0414, \u0438 \u043c\u044b \u0432\u0435\u0440\u043d\u0435\u043c\u0441\u044f \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/a87\/edb\/59f\/a87edb59f8f22e1634ee8cd6b5a9a5ab.jpg\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 Update employee, \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/d0b\/977\/e30\/d0b977e3029d37cbb60f8f5abde92ce7.jpg\"\/><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u0441\u043d\u043e\u0432\u0430 \u0432\u043e\u0437\u0432\u0440\u0430\u0442 \u043a \u0442\u0430\u0431\u043b\u0438\u0446\u0435.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/945\/30d\/539\/94530d539f6fc9d96229bbfe6e75db59.jpg\"\/><\/p>\n<p>  \u041d\u0443 \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 Delete employee, \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a \u0438\u0441\u043f\u0430\u0440\u0438\u0442\u0441\u044f.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/92d\/4f5\/4c2\/92d4f54c2b375cb32e7fe39c40250c4f.jpg\"\/><\/p>\n<p>  \u0425\u043e\u0434\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 bounded task flow. \u041e \u0442\u043e\u043c, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 task flows, \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f. \u041f\u043e\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/0b7\/9e4\/76f\/0b79e476fa60fe9eb2710e852d8dd24c.jpg\"\/><\/p>\n<p>  ViewEmployees, createEmployee \u0438 updateEmployee \u044d\u0442\u043e view activities \u0441 JSFF, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0438\u0435 \u0437\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438 \u0444\u043e\u0440\u043c.<br \/>  \u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 EmployeeView \u0438\u0437 Data Control \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0432 \u043e\u043f\u0446\u0438\u044f\u0445 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u2013 \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0438\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u044b (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2013 \u044d\u0442\u043e read only)<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/7ff\/998\/8ce\/7ff9988ce00498bc20d1fc67a0b2305f.jpg\"\/><\/p>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0432\u043e\u0434\u0430 \u0444\u043e\u0440\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u0445 createEmployee \u0438 updateEmployee \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0438\u0437 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u0438 Form (\u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u2013 \u044d\u0442\u043e ADF Form)<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/938\/c6f\/652\/938c6f65218558064e0fb5b688d1d224.jpg\"\/><\/p>\n<p>  \u0412\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 activities \u2013 \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 DataControl\u2019\u043e\u043c. \u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0435\u043d\u044b \u044d\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0442\u0430\u043a\u0436\u0435 \u0441 Data Controls \u043f\u0430\u043d\u0435\u043b\u0438.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/e1e\/af8\/b96\/e1eaf8b96eebca72633f208f91eb4717.jpg\"\/><\/p>\n<p>  CreateInsert \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0432 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0435 \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u0442 \u043a\u0443\u0440\u0441\u043e\u0440 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u043d\u0430 \u043d\u0435\u0435.<br \/>  Delete \u0443\u0434\u0430\u043b\u044f\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0432 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0435, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u0443\u0440\u0441\u043e\u0440.<br \/>  \u0427\u0442\u043e\u0431\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f CreateInsert \u0438 Delete \u0432\u0441\u0442\u0443\u043f\u0438\u043b\u0438 \u0432 \u0441\u0438\u043b\u0443, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e Commit, \u0430 \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043a\u0430\u0442\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u2013 Rollback. <br \/>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f CRUD\u2019\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430.<\/p>\n<h4>CRUD v2<\/h4>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0435 \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043e\u0442 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438, \u043d\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u043a\u043e\u043c-\u043b\u0438\u0431\u043e managed bean\u2019e. <\/p>\n<p>  \u0414\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432\u0441\u0442\u0430\u0432\u043a\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e. <br \/>  \u041f\u0435\u0440\u0432\u044b\u043c \u0448\u0430\u0433\u043e\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c managed bean.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/b14\/df1\/cd1\/b14df1cd1d0388d65a5d4cd629b5c520.jpg\"\/><\/p>\n<p>  \u041a\u043e\u0434 bean\u2019a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>  \u042f \u0441\u043e\u0437\u0434\u0430\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0443 \u043d\u0430 \u043d\u0435\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430. <br \/>  \u0412 input \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u0445 \u043f\u0440\u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0432\u044f\u0437\u0438 value \u043d\u0430 managed bean. \u0418 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044e \u043a\u043d\u043e\u043f\u043a\u0443, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 action listener\u2019a \u043c\u0435\u0442\u043e\u0434 managed bean&#8217;\u0430.<\/p>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u0440\u0430\u0437\u043c\u0435\u0442\u043a\u0430 jspx \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<pre><code class=\"xml\">&lt;af:form id=&quot;f1&quot;&gt;         &lt;af:table value=&quot;#{bindings.EmployeesView1.collectionModel}&quot; var=&quot;row&quot;                   rows=&quot;#{bindings.EmployeesView1.rangeSize}&quot;                   emptyText=&quot;#{bindings.EmployeesView1.viewable ? 'No data to display.' : 'Access Denied.'}&quot;                   fetchSize=&quot;#{bindings.EmployeesView1.rangeSize}&quot; rowBandingInterval=&quot;0&quot; id=&quot;t1&quot;&gt;             &lt;af:column sortProperty=&quot;#{bindings.EmployeesView1.hints.FirstName.name}&quot; sortable=&quot;false&quot;                        headerText=&quot;#{bindings.EmployeesView1.hints.FirstName.label}&quot; id=&quot;c1&quot;&gt;                 &lt;af:outputText value=&quot;#{row.FirstName}&quot; id=&quot;ot1&quot;\/&gt;             &lt;\/af:column&gt;             &lt;af:column sortProperty=&quot;#{bindings.EmployeesView1.hints.LastName.name}&quot; sortable=&quot;false&quot;                        headerText=&quot;#{bindings.EmployeesView1.hints.LastName.label}&quot; id=&quot;c2&quot;&gt;                 &lt;af:outputText value=&quot;#{row.LastName}&quot; id=&quot;ot2&quot;\/&gt;              &lt;\/af:column&gt;              &lt;af:column sortProperty=&quot;#{bindings.EmployeesView1.hints.Email.name}&quot; sortable=&quot;false&quot;                        headerText=&quot;#{bindings.EmployeesView1.hints.Email.label}&quot; id=&quot;c3&quot;&gt;                 &lt;af:outputText value=&quot;#{row.Email}&quot; id=&quot;ot3&quot;\/&gt;             &lt;\/af:column&gt;             &lt;af:column sortProperty=&quot;#{bindings.EmployeesView1.hints.PhoneNumber.name}&quot; sortable=&quot;false&quot;                        headerText=&quot;#{bindings.EmployeesView1.hints.PhoneNumber.label}&quot; id=&quot;c4&quot;&gt;                 &lt;af:outputText value=&quot;#{row.PhoneNumber}&quot; id=&quot;ot4&quot;\/&gt;             &lt;\/af:column&gt;             &lt;af:column sortProperty=&quot;#{bindings.EmployeesView1.hints.JobId.name}&quot; sortable=&quot;false&quot;                         headerText=&quot;#{bindings.EmployeesView1.hints.JobId.label}&quot; id=&quot;c5&quot;&gt;                 &lt;af:outputText value=&quot;#{row.JobId}&quot; id=&quot;ot5&quot;\/&gt;             &lt;\/af:column&gt;         &lt;\/af:table&gt;         &lt;af:panelFormLayout id=&quot;pfl1&quot;&gt;             &lt;af:inputText value=&quot;#{backingBeanScope.employeeBean.employeeId}&quot; label=&quot;#{bindings.EmployeeId.hints.label}&quot;                           required=&quot;#{bindings.EmployeeId.hints.mandatory}&quot;                           columns=&quot;#{bindings.EmployeeId.hints.displayWidth}&quot;                           maximumLength=&quot;#{bindings.EmployeeId.hints.precision}&quot;                           shortDesc=&quot;#{bindings.EmployeeId.hints.tooltip}&quot; id=&quot;it1&quot;&gt;                 &lt;f:validator binding=&quot;#{bindings.EmployeeId.validator}&quot;\/&gt;                 &lt;af:convertNumber groupingUsed=&quot;false&quot; pattern=&quot;#{bindings.EmployeeId.format}&quot;\/&gt;             &lt;\/af:inputText&gt;             &lt;af:inputText value=&quot;#{backingBeanScope.employeeBean.firstName}&quot; label=&quot;#{bindings.FirstName.hints.label}&quot;                           required=&quot;#{bindings.FirstName.hints.mandatory}&quot;                           columns=&quot;#{bindings.FirstName.hints.displayWidth}&quot;                           maximumLength=&quot;#{bindings.FirstName.hints.precision}&quot;                           shortDesc=&quot;#{bindings.FirstName.hints.tooltip}&quot; id=&quot;it2&quot;&gt;                 &lt;f:validator binding=&quot;#{bindings.FirstName.validator}&quot;\/&gt;             &lt;\/af:inputText&gt;             &lt;af:inputText value=&quot;#{backingBeanScope.employeeBean.lastName}&quot; label=&quot;#{bindings.LastName.hints.label}&quot;                           required=&quot;#{bindings.LastName.hints.mandatory}&quot;                           columns=&quot;#{bindings.LastName.hints.displayWidth}&quot;                           maximumLength=&quot;#{bindings.LastName.hints.precision}&quot;                           shortDesc=&quot;#{bindings.LastName.hints.tooltip}&quot; id=&quot;it3&quot;&gt;                  &lt;f:validator binding=&quot;#{bindings.LastName.validator}&quot;\/&gt;               &lt;\/af:inputText&gt;               &lt;af:inputText value=&quot;#{backingBeanScope.employeeBean.email}&quot; label=&quot;#{bindings.Email.hints.label}&quot;                           required=&quot;#{bindings.Email.hints.mandatory}&quot;                           columns=&quot;#{bindings.Email.hints.displayWidth}&quot;                           maximumLength=&quot;#{bindings.Email.hints.precision}&quot;                           shortDesc=&quot;#{bindings.Email.hints.tooltip}&quot; id=&quot;it4&quot;&gt;                 &lt;f:validator binding=&quot;#{bindings.Email.validator}&quot;\/&gt;               &lt;\/af:inputText&gt;               &lt;af:inputText value=&quot;#{backingBeanScope.employeeBean.phoneNumber}&quot; label=&quot;#{bindings.PhoneNumber.hints.label}&quot;                           required=&quot;#{bindings.PhoneNumber.hints.mandatory}&quot;                           columns=&quot;#{bindings.PhoneNumber.hints.displayWidth}&quot;                           maximumLength=&quot;#{bindings.PhoneNumber.hints.precision}&quot;                           shortDesc=&quot;#{bindings.PhoneNumber.hints.tooltip}&quot; id=&quot;it5&quot;&gt;                   &lt;f:validator binding=&quot;#{bindings.PhoneNumber.validator}&quot;\/&gt;               &lt;\/af:inputText&gt;               &lt;af:inputDate value=&quot;#{backingBeanScope.employeeBean.hireDate}&quot; label=&quot;#{bindings.HireDate.hints.label}&quot;                             required=&quot;#{bindings.HireDate.hints.mandatory}&quot;                             columns=&quot;#{bindings.HireDate.hints.displayWidth}&quot;                             shortDesc=&quot;#{bindings.HireDate.hints.tooltip}&quot; id=&quot;id1&quot;&gt;                   &lt;f:validator binding=&quot;#{bindings.HireDate.validator}&quot;\/&gt;                   &lt;af:convertDateTime pattern=&quot;#{bindings.HireDate.format}&quot;\/&gt;               &lt;\/af:inputDate&gt;               &lt;af:inputText value=&quot;#{backingBeanScope.employeeBean.jobId}&quot; label=&quot;#{bindings.JobId.hints.label}&quot;                             required=&quot;#{bindings.JobId.hints.mandatory}&quot;                             columns=&quot;#{bindings.JobId.hints.displayWidth}&quot;                             maximumLength=&quot;#{bindings.JobId.hints.precision}&quot;                             shortDesc=&quot;#{bindings.JobId.hints.tooltip}&quot; id=&quot;it6&quot;&gt;                   &lt;f:validator binding=&quot;#{bindings.JobId.validator}&quot;\/&gt;                &lt;\/af:inputText&gt;                &lt;af:commandButton text=&quot;Create Employee&quot; id=&quot;cb1&quot;                                 actionListener=&quot;#{backingBeanScope.employeeBean.createEmployee}&quot;\/&gt;            &lt;\/af:panelFormLayout&gt; &lt;\/af:form&gt; <\/code><\/pre>\n<p>  \u0410 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/a37\/61c\/b56\/a3761cb56594a56203a3070d36cd5bb3.jpg\"\/><\/p>\n<p>  \u041a\u043e\u0434 managed bean\u2019a (get\u2019\u0440\u044b \u0438 set\u2019\u0440\u044b \u043e\u043f\u0443\u0441\u0442\u0438\u043c).<br \/>  \u041f\u043e\u043b\u044f:  <\/p>\n<pre><code class=\"java\">    private int employeeId;     private String firstName;     private String lastName;     private String email;     private String phoneNumber;     private Timestamp hireDate;     private String jobId;     private BindingContainer bindings; <\/code><\/pre>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u0432\u0441\u0442\u0430\u0432\u043a\u0438, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435:  <\/p>\n<pre><code class=\"java\">public void createEmployee(ActionEvent actionEvent) {         \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c binding \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440         BindingContainer bindings = getBindings();         \/\/ \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438         OperationBinding createOperation =              bindings.getOperationBinding(&quot;CreateInsert&quot;);         createOperation.execute();         \/\/ \u0417\u0430\u0431\u0438\u0432\u0430\u0435\u043c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u0430\u043d\u043d\u044b\u043c\u0438         AttributeBinding employeeId =              (AttributeBinding)bindings.getControlBinding(&quot;EmployeeId&quot;);         employeeId.setInputValue(this.employeeId);         AttributeBinding firstName =              (AttributeBinding)bindings.getControlBinding(&quot;FirstName&quot;);         firstName.setInputValue(this.firstName);         AttributeBinding lastName =              (AttributeBinding)bindings.getControlBinding(&quot;LastName&quot;);         lastName.setInputValue(this.lastName);         AttributeBinding phoneNumber =              (AttributeBinding)bindings.getControlBinding(&quot;PhoneNumber&quot;);         phoneNumber.setInputValue(this.phoneNumber);         AttributeBinding email =              (AttributeBinding)bindings.getControlBinding(&quot;Email&quot;);         email.setInputValue(this.email);         AttributeBinding hireDate =              (AttributeBinding)bindings.getControlBinding(&quot;HireDate&quot;);         hireDate.setInputValue(this.hireDate);         AttributeBinding jobId =              (AttributeBinding)bindings.getControlBinding(&quot;JobId&quot;);         jobId.setInputValue(this.jobId);         \/\/ \u041a\u043e\u043c\u043c\u0438\u0442\u0438\u043c \u0438 \u0442\u0435\u043c \u0441\u0430\u043c\u044b\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443         OperationBinding commitOperation =              bindings.getOperationBinding(&quot;Commit&quot;);         commitOperation.execute();     } <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u0443 managed bean\u2019a, \u0443\u0431\u0435\u0434\u0438\u0432\u0448\u0438\u0441\u044c, \u0447\u0442\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u043f\u043e\u043f\u0430\u043b\u0430 \u043d\u043e\u0432\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/099\/d5c\/d26\/099d5cd26a9fdb722d56106624aafc17.jpg\"\/><\/p>\n<h4>CRUD v3<\/h4>\n<p>  \u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430.<br \/>  \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0443 Business Components.<br \/>  \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0442\u043a\u0440\u043e\u0435\u043c EmployeeView \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0430 \u0432\u043a\u043b\u0430\u0434\u043a\u0443 Java \u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u044b.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/057\/03b\/9bb\/05703b9bb889c077cf79830dc165d0a5.jpg\"\/><\/p>\n<p>  EmployeesViewImpl \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u043c\u0438, \u0430 EmployeesViewRowImpl \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u0442\u0440\u043e\u043a\u0443 \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0438\u043c \u0436\u0435 \u043f\u0443\u0442\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f Application Module.<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/f5e\/09b\/11d\/f5e09b11ddea693e1e635eeea8c1d989.jpg\"\/><\/p>\n<p>  \u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0434\u043b\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u0411\u0414 \u0432 EmployeesAppModuleImpl, \u0441\u043e\u0437\u0434\u0430\u0442\u044c TO \u043a\u043b\u0430\u0441\u0441 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434, \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432 managed bean\u2019e.<\/p>\n<p>  \u041c\u0435\u0442\u043e\u0434 \u0432 Application Module:  <\/p>\n<pre><code class=\"java\">    public void createEmployee(EmployeeInfo employeeInfo) {         \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c ViewObject         EmployeesViewImpl employeeView = getEmployeesView1();         \/\/ \u0413\u043e\u0442\u043e\u0432\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443.         EmployeesViewRowImpl employee = (EmployeesViewRowImpl)employeeView.createRow();         employee.setEmployeeId(employeeInfo.getEmployeeId());         employee.setEmail(employeeInfo.getEmail());         employee.setPhoneNumber(employeeInfo.getPhoneNumber());         employee.setFirstName(employeeInfo.getFirstName());         employee.setLastName(employeeInfo.getLastName());         employee.setHireDate(new Timestamp(employeeInfo.getHireDate()));         employee.setJobId(employeeInfo.getJobId());         \/\/ \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0432\u0441\u0442\u0430\u0432\u043a\u0438.         employeeView.insertRow(employee);         \/\/ \u041a\u043e\u043c\u043c\u0438\u0442\u0438\u043c         getDBTransaction().commit();     } <\/code><\/pre>\n<p>  \u041d\u043e\u0432\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 bean\u2019a:  <\/p>\n<pre><code class=\"java\">    public void createEmployee2(ActionEvent actionEvent) {         \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c application module         String applicationModuleClass = &quot;com.matim.forhabr.model.EmplyeesAppModuleImpl&quot;;         String config = &quot;EmplyeesAppModuleLocal&quot;;         EmplyeesAppModuleImpl appModule = (EmplyeesAppModuleImpl)             Configuration.createRootApplicationModule(applicationModuleClass, config);         \/\/ \u0417\u0430\u0431\u0438\u0432\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u043c\u0438 TO         EmployeeInfo employeeInfo = new EmployeeInfo();         employeeInfo.setEmail(this.email);         employeeInfo.setEmployeeId(this.employeeId);         employeeInfo.setFirstName(this.firstName);         employeeInfo.setHireDate(this.hireDate);         employeeInfo.setJobId(this.jobId);         employeeInfo.setLastName(this.lastName);         employeeInfo.setPhoneNumber(this.phoneNumber);         \/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u043e\u0434 \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430         appModule.createEmployee(employeeInfo);         \/\/ \u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u043c \u0440\u0435\u0441\u0443\u0440\u0441\u044b         Configuration.releaseRootApplicationModule(appModule, false);         \/\/ \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u0438\u0434\u0435\u0442 \u043d\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0435 AppModule,          \/\/ \u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439, \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b         \/\/ \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e Execute         BindingContainer bindings = getBindings();         OperationBinding executeIterator =              bindings.getOperationBinding(&quot;Execute&quot;);         executeIterator.execute();     } <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443:<br \/>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/44d\/edc\/66e\/44dedc66eefb7dcb6ffae203cb1ab647.jpg\"\/><\/p>\n<p>  \u041d\u0430 \u044d\u0442\u043e\u043c \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u0432\u0441\u0435. \u041c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0435\u0449\u0435 \u043e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u0431\u043e\u0440\u0442\u043e\u043c \u043f\u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u043c\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0432\u043b\u044e \u0441\u0441\u044b\u043b\u043a\u0443 \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e <a href=\"http:\/\/docs.oracle.com\/cd\/E24382_01\/web.1112\/e16182\/partpage2.htm#BABDGCEF\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<p>  P.S. \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043e task flows.    \t \t\t   \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/173059\/\"> http:\/\/habrahabr.ru\/post\/173059\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0414\u043e\u0431\u0440\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0442\u043e\u043a \u0445\u0430\u0431\u0440\u0430\u0432\u0447\u0430\u043d\u0435. \u041c\u043e\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0438\u043d\u0442\u0440\u043e \u0432 ADF. \u0418 \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u043e\u043f\u0440\u043e\u0441\u0430 \u044f \u0432\u0438\u0436\u0443, \u0447\u0442\u043e \u0442\u0435\u043c\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430, \u0442\u043e \u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e \u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0431 ADF.<\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430 \u043e \u0434\u0430\u043d\u043d\u043e\u043c \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0435, \u043c\u043e\u0436\u043d\u043e \u00ab\u0440\u0438\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u0431\u043e\u0439\u00bb \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0444\u0438\u0447\u0438 ADF \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u043e\u0431 ADF Business Components. \u041e \u0442\u043e\u043c \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u043e \u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e.  <\/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-173059","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/173059","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=173059"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/173059\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=173059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=173059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=173059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}