рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрд░ - .Net рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЬрди

рдЫрд╡рд┐


рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!


рд╣рдордиреЗ рд╡рд┐рдВрдбреЛрдЬ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдлрд╝рд╛рдЙрдВрдбреЗрд╢рди .Net рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреНрд░рд╡рд╛рд╕рди рдХреЗ рд╡рд┐рд╖рдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛, рдЬреЛ рдХрд┐ DIRECTUM рдХреЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЗрд╕реА рддрд░рд╣ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдерд╛ рдФрд░ рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдЪрд▓реЗ рдЧрдП рдереЗред


рдХрд╣рд╛рдиреА рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рд╣рдорд╛рд░рд╛ рдкреНрд░рдореБрдЦ рдЙрддреНрдкрд╛рдж, рдЕрд╡рдирдкреЛрд╕реНрдЯ рдЖрдИрдбреАрдПрдо, рдПрдХ рдЦрд╛рддрд╛ рдЬреАрд╡рдирдЪрдХреНрд░ рдФрд░ рдХрд░реНрдордЪрд╛рд░реА рдЕрднрд┐рдЧрдо рдкреНрд░рдмрдВрдзрди рдкреНрд░рдгрд╛рд▓реА рд╣реИред рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд░реЛрд▓ рдореЙрдбрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рджреЛрдиреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдЙрддреНрдкрд╛рдж рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╕реБрдмрд╣ рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рдЪрд░рдг-рджрд░-рдЪрд░рдг рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╛рдлреА рд╕рд░рд▓ рд╕реНрд╡рдпрдВ-рд╕реЗрд╡рд╛ рдкреНрд░рдгрд╛рд▓реА рдереА, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди рдХреЛ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рдерд╛ред


рдЫрд╡рд┐


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рдмрдбрд╝реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛, рддреЛ рд╣рдордиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рдЪреАрд▓реЗ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдХреНрдпреЛрдВрдХрд┐ рдПрдХреНрд╕реЗрд╕ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рдордиреНрд╡рдп рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдиреЗ рдПрдХ рдЕрдЪреНрдЫреЗ, рд╡рдЬрдирджрд╛рд░ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреА рдорд╛рдВрдЧ рдХреА рдереАред рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд BPMN рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд░реЛрд╕реЗрд╕ рдПрдбрд┐рдЯрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рд╣рдо рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж React.js + SVG рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдкрд╛рджрдХ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдЖрдЬ рд╣рдо рдмреИрдХрдПрдВрдб рд╡рд┐рд╖рдп рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗ - рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЗрдВрдЬрди рдпрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЬрдиред


рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ


рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдВрдЬрди рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдереАрдВ:


  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд░реЗрдЦ, рдПрдХ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рд╛рд░реВрдк, рд╣рдорд╛рд░реЗ рдкреНрд░рд╛рд░реВрдк рд╕реЗ рдЗрдВрдЬрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЬреНрдп рднрдВрдбрд╛рд░рдг
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рдорд░реНрдерди
  • рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди (рд╢рд╛рдЦрд╛рдУрдВ) рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
  • рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рдЙрддреНрдкрд╛рдж рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреБрдХреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕
  • рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

рдмрд╛рдЬрд╛рд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж (2014 рдХреЗ рд▓рд┐рдП), рд╣рдо .Net: рд╡рд┐рдВрдбреЛрдЬ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдлрд╝рд╛рдЙрдВрдбреЗрд╢рди рдХреЗ рд▓рд┐рдП рд▓рдЧрднрдЧ рдЧреИрд░-рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди рдкрд░ рдмрд╕ рдЧрдПред


рд╡рд┐рдВрдбреЛрдЬ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдлрд╛рдЙрдВрдбреЗрд╢рди (WWF)


рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдПрдл рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреА рддрдХрдиреАрдХ рд╣реИ рдЬреЛ рд╡рд░реНрдХрдлрд╝реНрд▓реЛрдЬрд╝ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред


рдЗрд╕рдХреЗ рддрд░реНрдХ рдХрд╛ рдЖрдзрд╛рд░ рдХреНрд░рд┐рдпрд╛рдУрдВ (рдЧрддрд┐рд╡рд┐рдзрд┐рдпреЛрдВ) рдХреЗ рд▓рд┐рдП рдХрдВрдЯреЗрдирд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╣реИ рдФрд░ рдЗрди рдХрдВрдЯреЗрдирд░реЛрдВ рд╕реЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдХрдВрдЯреЗрдирд░ рд╕рд╛рдзрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрджрдо рдЬрд╣рд╛рдВ рдЧрддрд┐рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдПрдХ рдкреНрд░рдмрдВрдзрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЬрд┐рд╕рдореЗрдВ рдмреНрд░рд╛рдВрдЪрд┐рдВрдЧ рдХрд╛ рддрд░реНрдХ рд╣реИред


рдЖрдк рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╕реАрдзреЗ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рд┐рдд рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрд░реЗрдЦ рд╣реИрдорд▓ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рдкреНрд░рд╛рд░реВрдк рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдбрд┐рдЬрд╛рдЗрдирд░ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдпрд╣ рдПрдХ рдУрд░ рд╣реИред рджреВрд╕рд░реА рдУрд░, рдЬрд╝рдореНрд▓ рдПрдХ рд╡рд┐рд╡рд░рдг рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рд╛рд░реВрдк рдирд╣реАрдВ рд╣реИ - рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдпреЛрдЬрдирд╛ рдЕрддрд┐рд░реЗрдХ рдХреЗ рдХрд╛рд░рдг, рдХрдо рд╕реЗ рдХрдо рд╡рд┐рд╢рд╛рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЗрд╕реЗ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдордЭрдирд╛ рд╣реЛрдЧрд╛ред


рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рдХреЛрдИ рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЬрд╝реЗрди рдХреЛ рд╕рдордЭ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрдврд╝рдирд╛ рд╕реАрдЦ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЬрди рдХреА рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреА рдХрдореА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реЗрд╢рд╛рдиреА рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИред рдЬрдм рддреНрд░реБрдЯрд┐ Wf рдХреЗ рдЖрдВрддреЛрдВ рд╕реЗ рдЖрддреА рд╣реИ, рддреЛ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣рдореЗрд╢рд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ 100% рдХреНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдХрд╛рд░рдг рдерд╛ред рдмрдВрдж рд╕реНрд░реЛрдд рдФрд░ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рд░рд╛рдХреНрд╖рд╕реА рдорд╛рдорд▓реЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЕрдХреНрд╕рд░ рдмрдЧ рдлрд┐рдХреНрд╕ рд▓рдХреНрд╖рдгреЛрдВ рдХреЗ рдХрд╛рд░рдг рдереЗред


рдирд┐рд╖реНрдкрдХреНрд╖рддрд╛ рдореЗрдВ, рдпрд╣ рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдиреЗ, рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП, Wf рдкрд░ рдордЬрдмреВрдд рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрд╛рд░рдг рд╣рдореЗрдВ рддреНрд░рд╕реНрдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдкрд╛рдардХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдЧрд╛ рдХрд┐ рд╣рдордиреЗ рдЦреБрдж рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдпрд╛, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╡реАрд░рддрд╛рдкреВрд░реНрд╡рдХ рд╣рд▓ рдХрд┐рдпрд╛ред рд╢реБрд░реВ рд╕реЗ рд╣реА рд╕реНрд╡-рдирд┐рд░реНрдорд┐рдд рдЗрдВрдЬрди рдмрдирд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡реЗ рд╕рд╣реА рд╣реЛрдВрдЧреЗред


рдиреАрдЪреЗ рдХреА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╕рдорд╛рдзрд╛рди рдиреЗ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдФрд░ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЪрд▓рд╛ рдЧрдпрд╛ред рд▓реЗрдХрд┐рди .Net рдХреЛрд░ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рдВрдХреНрд░рдордг рдиреЗ рд╣рдореЗрдВ рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдПрдл рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдФрд░ рдПрдХ рдЕрдиреНрдп рд╡реНрдпрд╡рд╕рд╛рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЬрди рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдордИ 2019 рддрдХ, рд╡рд┐рдВрдбреЛрдЬ рд╡рд░реНрдХрдлреНрд▓реЛ рдлрд╛рдЙрдВрдбреЗрд╢рди рдХреЛ .Net рдХреЛрд░ рдореЗрдВ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдПрдХ рдирдП рдЗрдВрдЬрди рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рдереЗ - рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рд╣рдо рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрд░ рдкрд░ рдмрд╕ рдЧрдПред


рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрд░


рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрд░ рдПрдХ рдореБрдХреНрдд рд╡реНрдпрд╛рдкрд╛рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрдВрдЬрди рд╣реИред рдпрд╣ рдПрдордЖрдИрдЯреА рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рддрд╣рдд рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЗрд╕реЗ рд╡рд╛рдгрд┐рдЬреНрдпрд┐рдХ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдпрд╣ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрдИ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ (рдЬрд╛рд╡рд╛, рдкрд╛рдпрдерди рдФрд░ рдХрдИ рдФрд░) рдХреЗ рд▓рд┐рдП рдкреЛрд░реНрдЯ рд╣реИрдВред


рдЗрдВрдЬрди рд╣рд▓реНрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдирд╛рдд рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдХрд┐рд╕реА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдирд┐рдпрдореЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдореВрд╣реАрдХреГрдд рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХреНрд░рдорд┐рдХ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдПрдХ рдореЗрдЬрдмрд╛рди рд╣реИред


рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╡рд┐рдХреА рдкреНрд░рд▓реЗрдЦрди рд╣реИ ред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЗрдВрдЬрди рдХреА рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкреВрд░реНрдг рдкреНрд░рд▓реЗрдЦрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реЛрдЧрд╛ - рдУрдкрдирд╕реЛрд░реНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдПрдХ рдЙрддреНрд╕рд╛рд╣реА рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╡рд┐рдХреА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред


рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдмрд╛рд╣рд░реА рднрдВрдбрд╛рд░рдг (рд╣рда рднрдВрдбрд╛рд░рдг) рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИред рдкреНрд░рджрд╛рддрд╛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╣реИрдВ:


  • MongoDB
  • SQL рд╕рд░реНрд╡рд░
  • PostgreSQL
  • SQLite
  • Amazon DynamoDB

рдЕрдкрдиреЗ рдкреНрд░рджрд╛рддрд╛ рд▓рд┐рдЦреЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХрд┐рд╕реА рднреА рдорд╛рдирдХ рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддреЗ рд╣реИрдВред


рдХреНрд╖реИрддрд┐рдЬ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕рдорд░реНрдерд┐рдд рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЖрдк рдПрдХ рд╕рд╛рде рдХрдИ рдиреЛрдбреНрд╕ рдкрд░ рдЗрдВрдЬрди рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд░рд╛рдЬреНрдпреЛрдВ рдХреЗ рднрдВрдбрд╛рд░рдг рдХрд╛ рдПрдХ рдмрд┐рдВрджреБ (рдПрдХ рд╣рда рднрдВрдбрд╛рд░рдг) рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрдВрдЬрди рдХреА рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдп рдХрддрд╛рд░ рдХрд╛ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рд╕рд╛рдорд╛рдиреНрдп рднрдВрдбрд╛рд░рдг рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЦрд░рдЧреЛрд╢рдореЗрдХреНрдпреВрдХреНрдпреВ, рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ)ред рдХрдИ рдиреЛрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдПрдХ рд▓реЙрдХ рдореИрдиреЗрдЬрд░ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрд╛рд╣рд░реА рднрдВрдбрд╛рд░рдг рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдирддрд╛ рд╕реЗ, рдорд╛рдирдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ:


  • рдПрдЬрд╝реНрдпреЛрд░ рд╕реНрдЯреЛрд░реЗрдЬ рд▓реАрдЬрд╝
  • Redis
  • AWS рдбрд╛рдпрдирдореЛрдбреАрдмреА
  • SQLServer (рд╕реНрд░реЛрдд рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ)

рдХреБрдЫ рдирдпрд╛ рдЬрд╛рдирдирд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред рддреЛ рдЪрд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдХ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд░рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрд╕рдВрднрд╡ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ - рдпрд╣ рд╕рд░рд▓ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рдеред


рдЪрд▓реЛ рдЪрд▓рддреЗ рд╣реИрдВред


рдЪрд░рдг (рдЪрд░рдг)


рдПрдХ рдХрджрдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдХрджрдо рд╣реИ рдЬрд┐рд╕ рдкрд░ рдХреЛрдИ рднреА рдХрд╛рд░реНрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЪрд░рдгреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХ рдХрджрдо рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд╛рд╣рд░ рд╕реЗ рдХреБрдЫ рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдПред рдРрд╕реЗ рдХрджрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ "рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░" рддрд░реНрдХ рд╕реЗ рд╕рдВрдкрдиреНрди рд╣реИрдВ:


  • WaitFor
  • рдЕрдЧрд░
  • рдЬрдм
  • foreach
  • рд╡рд┐рд▓рдВрдм
  • рд╕рдорд╛рдирд╛рдВрддрд░
  • рдЕрдиреБрд╕реВрдЪреА
  • рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╣реЛрдирд╛

рдмреЗрд╢рдХ, рдХреБрдЫ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдкрд░ рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╣рдореЗрдВ рдРрд╕реЗ рдХрджрдореЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдм, рдЙрдиреНрд╣реЗрдВ рдПрдХ рддрд░рдл рд░рдЦ рджреЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдХрджрдо рдЙрдард╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ StepBody рдЕрдореВрд░реНрддрддрд╛ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


public abstract class StepBody : IStepBody { public abstract ExecutionResult Run(IStepExecutionContext context); } 

рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдЪрд░рдг рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддреА рд╣реИ рддреЛ рд░рди рд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИред рдЗрд╕рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рддрд░реНрдХ рдХреЛ рд░рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред


  public abstract class StepBody : IStepBody { public abstract ExecutionResult Run(IStepExecutionContext context); } 

рдХрджрдо рдирд┐рд░реНрднрд░рддрд╛ рдЗрдВрдЬреЗрдХреНрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рд╣реА рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдПрдХ рдЬрдЧрд╣ рдЬрд╣рд╛рдВ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдкрд░рд┐рдгрд╛рдо рдЬреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред Wf рдХреЛрд░ рдХреА рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ рдЬреЛ рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЖрдк рд░рди () рд╡рд┐рдзрд┐ рд╕реЗ рд╕рдВрджрд░реНрдн рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдмрд┐рд▓реНрдЯ-рдЗрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдЕрдкрдиреЗ рд╕рдВрджрд░реНрдн рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдо рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдФрд░ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдиреАрдЪреЗ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХрд░реЗрдВрдЧреЗ, рдЕрднреА рдХреЗ рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд░реНрдЧ - рд╕рдВрджрд░реНрдн рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


  public class ProcessContext { public int Number1 {get;set;} public int Number2 {get;set;} public string StepResult {get;set;} public ProcessContext() { Number1 = 1; Number2 = 2; } } 

рдЪрд░ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╣рдо рд╕рдВрдЦреНрдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ; рдЪрд░ рдЪрд░рдг рдореЗрдВ - рдЪрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдоред


рд╣рдордиреЗ рд╕рдВрджрд░реНрдн рдкрд░ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЖрдк рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХрджрдо рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


  public class CustomStep : StepBody { private readonly Ilogger _log; public int Input1 { get; set; } public int Input2 { get; set; } public string Action { get; set; } public string Result { get; set; } public CustomStep(Ilogger log) { _log = log; } public override ExecutionResult Run(IStepExecutionContext context) { Result = тАЭnoneтАЭ; if (Action ==тАЭsumтАЭ) { Result = Number1 + Number2; } if (Action ==тАЭdifтАЭ){ Result = Number1 - Number2; } return ExecutionResult.Next(); } } 

рддрд░реНрдХ рдЕрддреНрдпрдВрдд рд╕рд░рд▓ рд╣реИ: рджреЛ рдирдВрдмрд░ рдФрд░ рдСрдкрд░реЗрд╢рди рдХрд╛ рдирд╛рдо рдЗрдирдкреБрдЯ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЖрдЙрдЯрдкреБрдЯ рдЪрд░ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдСрдкрд░реЗрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред


рд╣рдордиреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЬрд┐рд╕ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рд╕рд╛рде рдПрдХ рдХрджрдо рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЗрдВрдЬрди рдореЗрдВ рдЕрдкрдиреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдгред рдЗрдВрдЬрди рдореЗрдВ рдкрдВрдЬреАрдХрд░рдгред


рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рдкрд╣рд▓реЗ рдХреЛрдб рдореЗрдВ рд╡рд┐рд╡рд░рдг рд╣реИ - рд╣рд╛рд░реНрдбрдХреЛрдбред


рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдзрд╛рд░рд╛рдкреНрд░рд╡рд╛рд╣ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ ред рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд IWorkflow <T> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд╛рд░рд┐рд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд╣рд╛рдБ T рдореЙрдбрд▓ рд╕рдВрджрд░реНрдн рд╡рд░реНрдЧ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдПрдХ ProcessContext рд╣реИ ред


рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


  public class SimpleWorkflow : IWorkflow<ProcessContext> { public void Build(IWorkflowBuilder<ProcessContext> builder) { //    } public string Id => "SomeWorkflow"; public int Version => 1; } 

рд╡рд┐рд╡рд░рдг рд╕реНрд╡рдпрдВ рдмрд┐рд▓реНрдб рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рд╣реЛрдЧрд╛ред рдЖрдИрдбреА рдФрд░ рд╕рдВрд╕реНрдХрд░рдг рдлрд╝реАрд▓реНрдб рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред Wf рдХреЛрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ - рдЖрдк рд╕рдорд╛рди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде n рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкрдВрдЬреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рддрдм рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ "рд▓рд╛рдЗрд╡" рджреЗрдирд╛ рд╣реЛрддрд╛ рд╣реИред


рд╣рдо рдПрдХ рд╕рд░рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:


  public class SimpleWorkflow : IWorkflow<ProcessContext> { public void Build(IWorkflowBuilder<ProcessContext> builder) { builder.StartWith<CustomStep>() .Input(step => step.Input1, data => data.Number1) .Input(step => step.Input2, data => data.Number2) .Input(step => step.Action, data => тАЬsumтАЭ) .Output(data => data.StepResult, step => step.Result) .EndWorkflow(); } public string Id => "SomeWorkflow"; public int Version => 1; } 

рдпрджрд┐ "рдорд╛рдирд╡" рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓реЗрдЧрд╛ : рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╕реНрдЯрдорд╕реНрдЯреЗрдк рдЪрд░рдг рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдкрд┐рдЪ рдлрд╝реАрд▓реНрдб Input1 рдХрд╛ рдореВрд▓реНрдп рд╕рдВрджрд░реНрдн рдлрд╝реАрд▓реНрдб рдирдВрдмрд░ 1 рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд┐рдЪ рдлрд╝реАрд▓реНрдб Input2 рдХрд╛ рдорд╛рди рд╕рдВрджрд░реНрдн рдлрд╝реАрд▓реНрдб рдирдВрдмрд░ 2 рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдХреНрд╢рди рдлрд╝реАрд▓реНрдб рдХреЛ "рдпреЛрдЧ" рдорд╛рди рдХреЗ рд╕рд╛рде рд╕рдЦреНрддреА рд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо рдлрд╝реАрд▓реНрдб рд╕реЗ StepResult рд╕рдВрджрд░реНрдн рдлрд╝реАрд▓реНрдб рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдВред


рд╕рд╣рдордд рд╣реВрдВ, рдХреЛрдб рдмрд╣реБрдд рдкрдардиреАрдп рдирд┐рдХрд▓рд╛, рд╕реА # рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рдЬреНрдЮрд╛рди рдХреЗ рдмрд┐рдирд╛ рднреА, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдХрд╛рдлреА рд╕рдВрднрд╡ рд╣реИред


рд╣рдорд╛рд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрдХ рдФрд░ рдХрджрдо рдЬреЛрдбрд╝реЗрдВ, рдЬреЛ рд▓реЙрдЧ рдореЗрдВ рдкрд┐рдЫрд▓реЗ рдЪрд░рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛:


  public class CustomStep : StepBody { private readonly Ilogger _log; public string TextToOutput { get; set; } public CustomStep(Ilogger log) { //    _log = log; } public override ExecutionResult Run(IStepExecutionContext context) { _log.Debug(TextToOutput); return ExecutionResult.Next(); } } 

рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:


  public class SimpleWorkflow : IWorkflow<ProcessContext> { public void Build(IWorkflowBuilder<ProcessContext> builder) { builder.StartWith<CustomStep>() .Input(step => step.Input1, data => data.Number1) .Input(step => step.Input2, data => data.Number2) .Input(step => step.Action, data => тАЬsumтАЭ) .Output(data => data.StepResult, step => step.Result) .Then<OutputStep>.Input(step => step.TextToOutput, data => data.StepResult) .EndWorkflow(); } public string Id => "SomeWorkflow"; public int Version => 2; } 

рдЕрдм, рдЕрддрд┐рд░рд┐рдХреНрдд рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдХрджрдо рдХреЗ рдмрд╛рдж, рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓реЙрдЧ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХрд╛ рдЪрд░рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИред рдЗрдирдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкрд░рд┐рдгрд╛рдо рдФрд░ рд╕рдВрджрд░реНрдн рдЪрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдВрддрд┐рдо рдЪрд░рдг рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рд▓реВрдВрдЧрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдХреЛрдб (рд╣рд╛рд░реНрдбрдХреЛрдб) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдРрд╕рд╛ рд╡рд┐рд╡рд░рдг рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╣реЛрдЧрд╛ред рдЬрдм рддрдХ рдХреБрдЫ рдХрд╛рд░реНрдпрд╛рд▓рдп рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред рдХрдо рд╕реЗ рдХрдо, рд╣рдореЗрдВ рд╣рд░ рдмрд╛рд░ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдПрдХ рдирдпрд╛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред Wf core json рд╕реНрдХреАрдорд╛ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдХреЗ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред


Json рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд╡рд░рдг


рдЖрдЧреЗ рдореИрдВ рдХреЛрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд┐рд╡рд░рдг рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рд▓реЗрдЦ рдХреЛ рдлреБрд▓рд╛рдПрдЧрд╛ред


Wf рдХреЛрд░ json рдореЗрдВ рд╕реНрдХреАрдорд╛ рд╡рд┐рд╡рд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдЬреИрд╕рди xaml рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рджреГрд╢реНрдп рд╣реИ (рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╣реЛрд▓реАрд╡рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рд╖рдп :))ред рдлрд╝рд╛рдЗрд▓ рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:


 { "Id": "SomeWorkflow", "Version": 1, "DataType": "App.ProcessContext, App", "Steps": [ { /*step1*/ }, { /*step2*/ } ] } 

рдбреЗрдЯрд╛рдЯрд╛рдЗрдк рдлрд╝реАрд▓реНрдб рд╕рдВрджрд░реНрдн рд╡рд░реНрдЧ рдХреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рдирд╛рдо рдФрд░ рдЙрд╕ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдирд╛рдо рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╡рд░реНрдгрд┐рдд рд╣реИред рдЪрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рднреА рдЪрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдЪрд░рдг рддрддреНрд╡ рднрд░реЗрдВ:


 { "Id": "SomeWorkflow", "Version": 1, "DataType": "App.ProcessContext, App", "Steps": [ { "Id": "Eval", "StepType": "App.CustomStep, App", "NextStepId": "Output", "Inputs": { "Input1": "data.Number1", "Input2": "data.Number2" }, "Outputs": { "StepResult": "step.Result" } }, { "Id": "Output", "StepType": "App.OutputStep, App", "Inputs": { "TextToOutput": "data.StepResult" } } ] } 

рдЖрдЗрдП json рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд░рдг рд╡рд┐рд╡рд░рдг рдХреА рд╕рдВрд░рдЪрдирд╛ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред


Id рдФрд░ NextStepId рдлрд╝реАрд▓реНрдб рдЗрд╕ рдЪрд░рдг рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕рд╛ рдЪрд░рдг рдЕрдЧрд▓рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдВрдЧреНрд░рд╣ рдХреЗ рддрддреНрд╡реЛрдВ рдХрд╛ рдХреНрд░рдо рдорд╣рддреНрд╡рд╣реАрди рд╣реИред


StepType DataType рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рдореЗрдВ рдЪрд░рдг рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпреЛрдЧреНрдп рд╡рд░реНрдЧ рдирд╛рдо рд╣реЛрддрд╛ рд╣реИ (рдПрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛ StepBody рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдЖрддрд╛ рд╣реИ рдФрд░ рдЪрд░рдг рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ) рдФрд░ рдЕрд╕реЗрдВрдмрд▓реА рдХрд╛ рдирд╛рдоред рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рдореИрдкрд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЗрдирдкреБрдЯреНрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ , json element рдирд╛рдо рд╣рдорд╛рд░реЗ рд╕реНрдЯреЗрдк рдХреЗ рдХреНрд▓рд╛рд╕ рдлреАрд▓реНрдб рдХрд╛ рдирд╛рдо рд╣реИ; рддрддреНрд╡ рдХрд╛ рдореВрд▓реНрдп рд╡рд░реНрдЧ рдореЗрдВ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдВрджрд░реНрднред


рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреИрд╕рди рддрддреНрд╡ рдХрд╛ рдирд╛рдо рдХрдХреНрд╖рд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд╛рдо рд╣реИ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╕рдВрджрд░реНрдн; рддрддреНрд╡ рдореВрд▓реНрдп рд╣рдорд╛рд░реЗ рдХрджрдо рдХреЗ рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░ рдХрд╛ рдирд╛рдо рд╣реИред


рдбреЗрдЯрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджрд░реНрдн рдлрд╝реАрд▓реНрдб рдХреНрдпреЛрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред {Field_name} , рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрд░рдг {Field_name} ? рдХреНрдпреЛрдВрдХрд┐ wf рдХреЛрд░ рддрддреНрд╡ рдорд╛рди рдХреЛ C # рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдбрд╛рдпрдирд╛рдорд┐рдХ рдПрдХреНрд╕рдкреНрд░реЗрд╢рдВрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬ рд╣реИ, рдЗрд╕рдХреА рдорджрдж рд╕реЗ рдЖрдк рд╕реАрдзреЗ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдВрджрд░ рдХреБрдЫ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЕрдЧрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рд╡рд╛рд╕реНрддреБрдХрд╛рд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдкрдорд╛рди рдХреЛ рдордВрдЬреВрд░реА рджреЗрддрд╛ рд╣реИ :)ред


рд╣рдо рдпреЛрдЬрдирд╛ рдХреЛ рдорд╛рдирдХ рдЖрджрд┐рдо рдХреЗ рд╕рд╛рде рд╡рд┐рд╡рд┐рдзрддрд╛ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рд╕рд╢рд░реНрдд рдЬреЛрдбрд╝реЗрдВ рдпрджрд┐ рдмрд╛рд╣рд░реА рдШрдЯрдирд╛ рдХреЛ рдЪрд░рдгрдмрджреНрдз рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЕрдЧрд░

рдЖрджрд┐рдо рдЕрдЧрд░ ред рдпрд╣рд╛рдВ рдореБрд╢реНрдХрд┐рд▓реЗрдВ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рдиреЛрдЯреЗрд╢рди рдореЗрдВ bpmn рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдПрдХ рдЖрд╕рд╛рди рд╕реЗрдЯрдЕрдк рдорд┐рд▓реЗрдЧрд╛ред рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЪрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:


 { "Id": "IfStep", "StepType": "WorkflowCore.Primitives.If, WorkflowCore", "NextStepId": "nextStep", "Inputs": { "Condition": "<<expression to evaluate>>" }, "Do": [ [ { /*do1*/ }, { /*do2*/ } ] ] } 

рдРрд╕рд╛ рдХреЛрдИ рдПрд╣рд╕рд╛рд╕ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреБрдЫ рдЧрд▓рдд рд╣реИ? рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реИред рдЪрд░рдг рдЗрдирдкреБрдЯ рдХреЛ рд╢рд░реНрдд - рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо Do рд╕рд░рдгреА (рдХреНрд░рд┐рдпрд╛) рдХреЗ рдЕрдВрджрд░ рдЪрд░рдгреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рддреЛ, рдЭреВрдареА рд╢рд╛рдЦрд╛ рдХрд╣рд╛рдБ рд╣реИ? рдХреНрдпреЛрдВ рдЧрд▓рдд рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рд░рдгреА рдирд╣реАрдВ рд╣реИ? рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИред рдпрд╣ рд╕рдордЭрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЭреВрдареА рд╢рд╛рдЦрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдПрдХ рдорд╛рд░реНрдЧ рд╣реИ, рдЕрд░реНрдерд╛рддреН, NextStepId рдореЗрдВ рд╕реВрдЪрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдПред рдкрд╣рд▓реЗ рддреЛ рдореИрдВ рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ рд▓рдЧрд╛рддрд╛рд░ рдЙрд▓рдЭрди рдореЗрдВ рдерд╛ред рдареАрдХ рд╣реИ, рдЗрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдирд╣реАрдВред рдпрджрд┐ рдЯреНрд░реВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдЗрдпреЛрдВ рдХреЛ рдбреВ рдХреЗ рдЕрдВрджрд░ рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рддреЛ рдпрд╣ "рд╕реБрдВрджрд░" рдЬрд╕рди рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рдпреЗ рд╣реИрдВ рддреЛ рдПрдХ рджрд░реНрдЬрди рдХреЗ рд╕рд╛рде рд╕рдВрд▓рдЧреНрди рд╣реИрдВ? рд╕рдм рдХреБрдЫ рдмрдЧрд╝рд▓ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рдПрдЧрд╛ред рд╡реЗ рдпрд╣ рднреА рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ xaml рдкрд░ рд╕реНрдХреАрдо рдХреЛ рдкрдврд╝рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣реИрдХ рд╣реИред рдмрд╕ рдореЙрдирд┐рдЯрд░ рдХреЛ рд╡реНрдпрд╛рдкрдХ рд▓реЗрдВред рдпрд╣ рдереЛрдбрд╝рд╛ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдЪрд░рдгреЛрдВ рдХрд╛ рдХреНрд░рдо рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИ, рд╕рдВрдХреНрд░рдордг рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдФрд░ рдХрджрдо рдЬреЛрдбрд╝реЗрдВ:


 { "Id": "Jump", "StepType": "App.JumpStep, App", "NextStepId": "" } 

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ? рд╕рдЪ рд╣реИ, рд╣рдо рдПрдХ рд╕реЗрд╡рд╛ рдЪрд░рдг рдХреА рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╛рд░рдЧрдорди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ NextStepId рдореЗрдВ рдПрдХ рдХрджрдо рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИред


рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:


 { "Id": "SomeWorkflow", "Version": 1, "DataType": "App.ProcessContext, App", "Steps": [ { "Id": "Eval", "StepType": "App.CustomStep, App", "NextStepId": "MyIfStep", "Inputs": { "Input1": "data.Number1", "Input2": "data.Number2" }, "Outputs": { "StepResult": "step.Result" } }, { "Id": "MyIfStep", "StepType": "WorkflowCore.Primitives.If, WorkflowCore", "NextStepId": "OutputEmptyResult", "Inputs": { "Condition": "!String.IsNullOrEmpty(data.StepResult)" }, "Do": [ [ { "Id": "Jump", "StepType": "App.JumpStep, App", "NextStepId": "Output" } ] ] }, { "Id": "Output", "StepType": "App.OutputStep, App", "Inputs": { "TextToOutput": "data.StepResult" } }, { "Id": "OutputEmptyResult", "StepType": "App.OutputStep, App", "Inputs": { "TextToOutput": "\"Empty result\"" } } ] } 

рдпрджрд┐ рдЪрд░рдг рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ Eval рдЪрд░рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЦрд╛рд▓реА рд╣реИред рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рдирд╣реАрдВ рд╣реИ, рддреЛ рд╣рдо рдкрд░рд┐рдгрд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ; рдпрджрд┐ рдпрд╣ рдЦрд╛рд▓реА рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ " рдЦрд╛рд▓реА рдкрд░рд┐рдгрд╛рдо "ред рдЬрдВрдк рд╕реНрдЯреЗрдк рдкреНрд░реЛрд╕реЗрд╕ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреЗрдк рдкрд░ рд▓реЗ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдбреВ рдХрд▓реЗрдХреНрд╢рди рдХреЗ рдмрд╛рд╣рд░ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рдпреЛрдЬрдирд╛ рдХреА "рдКрд░реНрдзреНрд╡рд╛рдзрд░рддрд╛" рдмрдирд╛рдП рд░рдЦреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рддрд░рд╣ рд╕реЗ, рдПрди рдХрджрдо рдкреАрдЫреЗ рдХреА рдУрд░ рдХреВрдж рд╕рдХрддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рдПрдХ рдЪрдХреНрд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред Wf рдХреЛрд░ рдореЗрдВ рдЫреЛрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреАрдкреАрдПрди рдореЗрдВ, рд▓реВрдкреНрд╕ рдХрд╛ рдЖрдпреЛрдЬрди рдЗрдл рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдпрд╛ рдорд╛рдирдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдпрд╣ рдЖрдкрдХреЗ рдКрдкрд░ рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдРрд╕рд╛ рд╕рдВрдЧрдарди рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХрджрдо рдерд╛ред


WaitFor

WaitFor рдЖрджрд┐рдо рдмрд╛рд╣рд░реА рджреБрдирд┐рдпрд╛ рдХреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЪрд░рдг рдореЗрдВ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЖрдЧреЗ рдХреЗ рдкрд╛рдареНрдпрдХреНрд░рдо рдХреА рдордВрдЬреВрд░реА рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ WaitFor рдЪрд░рдг рдореЗрдВ рддрдм рддрдХ рдЦрдбрд╝реА рд░рд╣реЗрдЧреА рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдПрдХ рдРрд╕реА рдШрдЯрдирд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░ рд▓реЗрддреА рдЬрд┐рд╕реЗ рдЗрд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЖрджрд┐рдо рд╕рдВрд░рдЪрдирд╛:


 { "Id": "Wait", "StepType": "WorkflowCore.Primitives.WaitFor, WorkflowCore", "NextStepId": "NextStep", "CancelCondition": "If(cancel==true)", "Inputs": { "EventName": "\"UserAction\"", "EventKey": "\"DoSum\"", "EffectiveDate": "DateTime.Now" } } 

рдореИрдВ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред


рд░рджреНрдж рдХрд░рдирд╛ - рдПрдХ рд╡реНрдпрд╡рдзрд╛рди рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреА рд╢рд░реНрддред рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХреЛрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ n рдЕрд▓рдЧ-рдЕрд▓рдЧ рдШрдЯрдирд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реА рд╣реИ (wf рдХреЛрд░ рдЪрд░рдгреЛрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ), рддреЛ рд╕рднреА рдХреЗ рдЖрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд░рджреНрдж рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред рд╣рдо рд╕рдВрджрд░реНрдн рдЪрд░ рдореЗрдВ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдзреНрд╡рдЬ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдШрдЯрдирд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рд╣рдо рдзреНрд╡рдЬ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ - рд╕рднреА WaitFor рдЪрд░рдг рдкреВрд░реЗ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред


EventName рдФрд░ EventKey - рдШрдЯрдирд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдХреБрдВрдЬреАред рдШрдЯрдирд╛рдУрдВ рдХреЛ рднреЗрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рд╛рдеред рддрд╛рдХрд┐ рдЗрдВрдЬрди рд╕рдордЭ рд╕рдХреЗ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рдШрдЯрдирд╛ рдХрд╛ рдЗрд░рд╛рджрд╛ рд╣реИ рдФрд░ рдХреМрди рд╕рд╛ рдХрджрдоред


рдкреНрд░рднрд╛рд╡реАрдЯреЗрдЯ - рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреНрд╖реЗрддреНрд░ рдЬреЛ рдПрдХ рдЗрд╡реЗрдВрдЯ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЛ "рднрд╡рд┐рд╖реНрдп рдореЗрдВ" рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рддреБрд░рдВрдд рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдордп рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдмрд╛рд╣рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдХрджрдо рдЙрдард╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдмреЗрдорд╛рдиреА рд╣реЛрдЧрд╛ред рдПрдХ рдмрд╛рд╣рд░реА рдШрдЯрдирд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЗрд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рддрд░реНрдХ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрджрдо рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдПрдХ рдмрд╛рд╣рд░реА рдШрдЯрдирд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдХрд░ CustomStep рдХрджрдо рдХреЗ рдкреВрд░рдХ рд╣реИрдВ :


  public class CustomStep : StepBody { private readonly Ilogger _log; public string TextToOutput { get; set; } public CustomStep(Ilogger log) { _log = log; } public override ExecutionResult Run(IStepExecutionContext context) { //-  return ExecutionResult.WaitForEvent("eventName", "eventKey", DateTime.Now); } } 

рд╣рдордиреЗ рдорд╛рдирдХ WaitForEvent () рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рдмрддрд╛рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ EventName , EventKey рдФрд░ EffectDate рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдХрджрдо рдХреЗ рддрд░реНрдХ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡рд░реНрдгрд┐рдд рдШрдЯрдирд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧреА рдФрд░ рдЗрдВрдЬрди рдмрд╕ рдореЗрдВ рдШрдЯрдирд╛ рдХреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рд░рди () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧреАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд░реНрддрдорд╛рди рд░реВрдк рдореЗрдВ, рд╣рдо рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдХреЗ рдХреНрд╖рдгреЛрдВ рдФрд░ рдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдореИрдВ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рддрд░реНрдХ рдХреЛ рдХрджрдо рдХреЗ рд╕реНрддрд░ рд╕реЗ рдкрд╣рд▓реЗ-рдмрд╛рдж рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдФрд░ EventPublished рдзреНрд╡рдЬ рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджрд░реНрдн рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд┐рдд рд╣реИ, рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 var ifEvent=context.ExecutionPointer.EventPublished; 

рдЗрд╕ рдзреНрд╡рдЬ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдмрд╛рд╣рд░реА рдШрдЯрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рддрд░реНрдХ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг - рдЗрдВрдЬрди рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдПрдХ рдХрджрдо рдХреЗрд╡рд▓ рдПрдХ рдШрдЯрдирд╛ рдкрд░ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рдмрд╛рд░ рдЙрд╕ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдЕрдкреНрд░рд┐рдп рд╕реАрдорд╛ рд╣реИред рд╣рдо рднреА рдЗрд╕ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рд╕реЗ рджреВрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдВрдЬрди "рдЦрддреНрдо" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдерд╛ред рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЙрдирдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рдЕрдиреНрдпрдерд╛ рд▓реЗрдЦ рдХрднреА рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ :)ред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрдкрдпреЛрдЧ рдкреНрд░рдерд╛рдУрдВ рдФрд░ рд╕реБрдзрд╛рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдмрд╛рдж рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред


рдЗрдВрдЬрди рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдмрд╕ рдореЗрдВ рдШрдЯрдирд╛ рдХрд╛ рдкреНрд░рдХрд╛рд╢рдиред


рдЗрд╕рд▓рд┐рдП, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдЪрд░рдгреЛрдВ рдФрд░ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рддрд░реНрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкрддрд╛ рд▓рдЧрд╛ред рдЬреЛ рдЪреАрдЬ рдмрдиреА рд╣реБрдИ рд╣реИ рд╡рд╣ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧреА - рд╡рд┐рд╡рд░рдг рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рд╣рдо рдорд╛рдирдХ AddWorkflow () рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдЬреЛ рд╣рдорд╛рд░реЗ IoC рдХрдВрдЯреЗрдирд░ рдореЗрдВ рдЗрд╕рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЬрдЧрд╣ рджреЗрдЧрд╛ред


рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:


 public static IServiceCollection AddWorkflow(this IServiceCollection services, Action<WorkflowOptions> setupAction = null) 

IServiceCollection - рдЗрдВрдЯрд░рдлрд╝реЗрд╕ - рд╕реЗрд╡рд╛ рд╡рд┐рд╡рд░рдгреЛрдВ рдХреЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрдмрдВрдзред рд╡рд╣ Microsoft рд╕реЗ DI рдХреЗ рдЕрдВрджрд░ рд░рд╣рддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рдпрд╣рд╛рдБ рдкрдврд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ )


WorkflowOptions - рдореВрд▓ рдЗрдВрдЬрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ред рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ; рдорд╛рдирдХ рдореВрд▓реНрдп рдкрд╣рд▓реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИрдВред рд╣рдо рдФрд░ рдЖрдЧреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред


рдпрджрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХреЛрдб рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдкрдВрдЬреАрдХрд░рдг рдЗрд╕ рддрд░рд╣ рд╣реЛрддрд╛ рд╣реИ:


 var host = _serviceProvider.GetService<IWorkflowHost>(); host.RegisterWorkflow<SomeWorkflow, ProcessContext>(); 

рдпрджрд┐ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ json рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрдВрдЬреАрдХреГрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, json рд╡рд┐рд╡рд░рдг рдХреЛ рднрдВрдбрд╛рд░рдг рд╕реНрдерд╛рди рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП):


 var host = _serviceProvider.GetService<IWorkflowHost>(); var definitionLoader = _serviceProvider.GetService<IDefinitionLoader>(); var definition = loader.LoadDefinition({*json  *}); 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рджреЛрдиреЛрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рд▓рд┐рдП, рдХреЛрдб рд╕рдорд╛рди рд╣реЛрдЧрд╛:


 host.Start(); //      host.StartWorkflow(definitionId, version, context); //      /// host.Stop(); / /     

рдбрд┐рдлреЗрдВрдбрдЖрдИрдб рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рд╣реИред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЖрдИрдбреА рдлрд╝реАрд▓реНрдб рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, id = SomeWorkflow ред


рд╕рдВрд╕реНрдХрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдХреМрди рд╕рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЪрд▓рдирд╛ рд╣реИред рдЗрдВрдЬрди рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЗ рд╕рд╛рде рддреБрд░рдВрдд n рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдЪрд▓ рд░рд╣реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирдП рдмрдирд╛рдП рдЬрд╛рдПрдВрдЧреЗ, рдкреБрд░рд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд░рд╛рдиреЗ рдкрд░ рдЪреБрдкрдЪрд╛рдк рд░рд╣реЗрдВрдЧреЗред


рд╕рдВрджрд░реНрдн рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрджрд░реНрдн рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред


Host.Start () рдФрд░ host.Stop () рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рд╢реБрд░реВ рдФрд░ рдмрдВрдж рдХрд░рддреА рд╣реИрдВред рдпрджрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдкреНрд░рдХреНрд╖реЗрдкрдг рдПрдХ рд▓рд╛рдЧреВ рдХрд╛рд░реНрдп рд╣реИ рдФрд░ рд╕рдордп-рд╕рдордп рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЖрд╡реЗрджрди рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдореБрдЦреНрдп рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХреЛ рд░реЛрдХрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдмрд╛рд╣рд░ рдХреА рджреБрдирд┐рдпрд╛ рд╕реЗ рдЗрдВрдЬрди рдмрд╕ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ, рдЬреЛ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдмреАрдЪ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдЧреА:


 Task PublishEvent(string eventName, string eventKey, object eventData, DateTime effectiveDate = null); 

рд▓реЗрдЦ рдореЗрдВ рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдЕрдзрд┐рдХ рдерд╛ ( рджреЗрдЦреЗрдВ WaitFor рдЖрджрд┐рдо рднрд╛рдЧ )ред


рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдордиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрд░ - рдУрдкрдирд╕реЛрд░реНрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдЦрд┐рдо рдЙрдард╛рдпрд╛, рдЬреЛ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдПрдХ рд╡реНрдпрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдмрд╣реБрдд рдЦрд░рд╛рдм рдкреНрд░рд▓реЗрдЦрди рдХреЗ рд╕рд╛рде рднреАред рдФрд░ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЙрддреНрдкрд╛рджрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ (рд╣рдорд╛рд░реЗ рдЕрд▓рд╛рд╡рд╛) рдореЗрдВ wf рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдерд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред рдмреЗрд╢рдХ, рдЕрдореВрд░реНрддрддрд╛ рдХреА рдПрдХ рдЕрд▓рдЧ рдкрд░рдд рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдЦреБрдж рдХреЛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдПрдХ рдорд╛рдорд▓реЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдмреАрдорд╛ рдХрд░рд╛рдпрд╛ рдФрд░ рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдПрдл рдореЗрдВ рдЬрд▓реНрджреА рд▓реМрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╛ рдПрдХ рд╕реНрд╡-рд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди, рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд╣реЛ рдЧрдпрд╛ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдирд╣реАрдВ рдЖрдИред


рдУрдкрдирд╕реЛрд░реНрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрд░ рдЗрдВрдЬрди рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рд╕реЗ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╣реБрдЖ, рдЬрд┐рд╕рдиреЗ рд╣рдореЗрдВ рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдПрдл рдкрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ рд░рд╣рдиреЗ рд╕реЗ рд░реЛрдХрд╛ред рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╕рдорд░реНрдердиред рдиреЗрдЯ рдХреЛрд░ рдФрд░ рдЗрд╕ рддрд░рд╣ рдХреА рдХрдореА рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдПрдлред


рдЗрд╕рдХреЗ рдмрд╛рдж рдЦреБрд▓рд╛ рд╕реНрд░реЛрдд рд╣реИред рдбрдмреНрд▓реНрдпреВрдбрдмреНрд▓реНрдпреВрдПрдл рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХреЗ рдЖрдВрддреНрд░ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛, рд╕реНрд░реЛрдд рдХреЛ рдХрдо рд╕реЗ рдХрдо рдкрдврд╝рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧреАред рдЙрдирдореЗрдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХрд╛ рдЬрд┐рдХреНрд░ рдирд╣реАрдВред рдпрд╣рд╛рдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрд░ рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╕реНрд╡рддрдВрддреНрд░рддрд╛ (рд▓рд╛рдЗрд╕реЗрдВрд╕рд┐рдВрдЧ - рдПрдордЖрдИрдЯреА рд╕рд╣рд┐рдд)ред рдпрджрд┐ рдЗрдВрдЬрди рдХреЗ рдЖрдВрддреНрд░ рд╕реЗ рдЕрдЪрд╛рдирдХ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рд╕рд┐рд░реНрдл рдЧреАрдереВрдм рд╕реЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рд╢рд╛рдВрддрд┐ рд╕реЗ рдЗрд╕рдХреА рдШрдЯрдирд╛ рдХреЗ рдХрд╛рд░рдг рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдВред рд╣рд╛рдВ, рдмрд╕ рдмреНрд░реЗрдХрдкреЙрдЗрдВрдЯ рдХреЗ рд╕рд╛рде рдбрд┐рдмрдЧ рдореЛрдб рдореЗрдВ рдЗрдВрдЬрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рддреА рд╣реИред


рдмреЗрд╢рдХ, рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЛрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирдП рд▓рд╛рдПред рд╣рдореЗрдВ рдЗрдВрдЬрди рдХреЛрд░ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рдерд╛ред рд▓реЗрдХрд┐рдиред рдЦрд░реЛрдВрдЪ рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдВрдЬрди рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдХрдо рд▓рд╛рдЧрдд рдореЗрдВ "рдкрд░рд┐рд╖реНрдХрд░рдг" рдкрд░ рдХрд╛рдо рдХрд░реЗрдВред рдЕрдВрддрд┐рдо рд╕рдорд╛рдзрд╛рди рдЧрддрд┐ рдФрд░ рд╕реНрдерд┐рд░рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рдлреА рд╕реНрд╡реАрдХрд╛рд░реНрдп рдерд╛, рдЗрд╕рдиреЗ рд╣рдореЗрдВ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓рдиреЗ рдФрд░ рдЙрддреНрдкрд╛рдж рдХреЗ рд╡реНрдпрд╡рд╕рд╛рдп рдореВрд▓реНрдп рдХреЗ рд╡рд┐рдХрд╛рд╕ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред


PS рдпрджрд┐ рд╡рд┐рд╖рдп рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрдВрдЬрди рдХреЗ рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╕рд╛рде wf рдХреЛрд░ рдкрд░ рдЕрдзрд┐рдХ рд▓реЗрдЦ рд╣реЛрдВрдЧреЗред

Source: https://habr.com/ru/post/hi475902/


All Articles