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

рдХрд╛рдо рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:
- рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ ( рд╡реАрдПрд╕ рдХрдореНрдпреБрдирд┐рдЯреА рдПрдбрд┐рд╢рди рдХрд╛ рдореБрдлреНрдд рд╕рдВрд╕реНрдХрд░рдг рд╕рд╣реА рд╣реИред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рджреМрд░рд╛рди, рдЖрдкрдХреЛ .NET рдбреЗрд╕реНрдХрдЯреЙрдк рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрдХреЗрдЬреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- Nuget рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░
- .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 4.6.1 рд▓рдХреНрд╖реНрдпреАрдХрд░рдг рдкреИрдХ (4.6 рдЖрд╡рд╢реНрдпрдХ)
- C # рдФрд░ Visual Basic (рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рднреА .NET рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ, C # рдпрд╛ VB.NET рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ C # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред
- рд╡рд┐рдВрдбреЛрдЬ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдлрд╛рдЙрдВрдбреЗрд╢рди
- UiPath рд╕реНрдЯреВрдбрд┐рдпреЛ (рдФрд░ рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдЪреАрдЬрд╝, рдореБрдлреНрдд CE, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ UiPath рдХрдореНрдпреБрдирд┐рдЯреА рдПрдбрд┐рд╢рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлреЙрд░реНрдо рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рдПрдирдмреА рдЦреБрдж рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдХреНрдпрд╛ рдХрд░реЗрдВрдЧреЗред
- NuGet Package Manager (VS 2017 рд╕реЗ рдмрдВрдбрд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдпрд╛ Nuget.org рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░реЛ
VS рдореЗрдВ рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ
C# Class Library (.NET Framework)
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рд╡рд┐рдзрддрд╛рдПрдВ (рдЬреИрд╕реЗ C # рдХреНрд▓рд╛рд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА (.NET Standard) ) рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред

- рд╣рдо рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рд░реНрдердХ рдирд╛рдо рдЪреБрдирддреЗ рд╣реИрдВ (рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╛рд░реВрдк <рдбреЗрд╡рд▓рдкрд░> .UiPath.Activitiesред <рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдирд╛рдо> ) рдФрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо
.NET Framework 4.6.1
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
NuGet рдкреИрдХреЗрдЬ ID рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдПрдБ рд╢рдмреНрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЪреВрдВрдХрд┐ рд╣рдо рд╡реАрдПрд╕ рд╕реЗ рд╕рдм рдХреБрдЫ рд▓реЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреБрд░рдВрдд рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд╛рдо рджреЗрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдиреБрдЧреЗрдЯ рдореЗрдВ рд▓реЗ рд╕рдХреЗрдВред

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

рдЖрд╕рд╛рди рдПрдХреНрд╢рди рдХреНрд░рд┐рдПрд╢рди рдФрд░ рдкреНрд░рдХрд╛рд╢рди
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ .dll
рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдПрдХ рдЦрд╛рд▓реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИред рдЕрдм рд╣рдо рд╕реНрд╡рдпрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред
NB рдЪреВрдВрдХрд┐ UiPath рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдЬреЛ рд╣рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЙрд╕рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред
- рд╣рдореЗрдВ рджреЛ
using
рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
using System; using System.Activities;
- рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЛ
CodeActivity
рд╕реЗ CodeActivity
рд▓реЗрддреЗ рд╣реИрдВ:
public class TutorialForHabr: CodeActivity {}
- рд╣рдо рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
public class TutorialForHabr: CodeActivity { public InArgument<Int32> Row { get; set; } public InArgument<Int32> Column { get; set; } public OutArgument<String> Cell { get; set; } }
рдПрдирдмреА рдПрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдирдкреБрдЯ InArgument< >
, рдЖрдЙрдЯрдкреБрдЯ OutArgument< >
рдФрд░ рдорд┐рд╢реНрд░рд┐рдд рд╣реИрдВ, рджреЛрдиреЛрдВ рдХреЛ InOutArgument< >
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
- рдФрд░
Execute
рд╡рд┐рдзрд┐, рдЬреЛ рдХрд┐ рдПрдХрдорд╛рддреНрд░ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:
protected override void Execute(CodeActivityContext context) { string colstr = "";
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ UiPath рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдХрд╛рд░реНрд░рд╡рд╛рдИ рд╣реИ рдЬреЛ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреА рд╣реИред
рд╣рдо рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЪрд▓реЗ рдЬрд╛рдПрдБрдЧреЗ рдФрд░ рдереЛрдбрд╝рд╛ рд╕рд╛, "рд╕рдЬрд╛рд╡рдЯ" рдХрд░реЗрдВрдЧреЗред
NuGet рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ
рдЖрдк NuGet рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ GUI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╛ nuget.exe pack
рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ NuGet рдкреИрдХреЗрдЬ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред pack
рдХрдорд╛рдВрдб рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рджреЛ рдореБрдЦреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ: рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо .csproj рдпрд╛ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдоред рдкреИрдХреЗрдЬ рдХреА рдореЗрдЯрд╛-рдЬрд╛рдирдХрд╛рд░реА рдпреБрдХреНрддред рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рд╣рдореЗрдВ .json рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдореИрдиреБрдЕрд▓ рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдкреИрдХреЗрдЬ рдХреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЧреБрдгреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдЯреИрдЧ, рд▓рд╛рдЗрд╕реЗрдВрд╕ рдпрд╛ URL, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдпрд╣ рдЖрдкрдХреЛ рдЙрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЗрдХрди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдкреИрдХреЗрдЬ рдкреНрд░рдмрдВрдзрдХ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред
рджреВрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рд╣рдо рдкреИрдХреЗрдЬ рдХреЗ рдХреБрдЫ рдЧреБрдгреЛрдВ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ, рдлрд┐рд░ рднреА, рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкрде 1.5 рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░реВрдЯ рдореЗрдВ .nuspec (рдирд╛рдо рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛, рдХреЗрд╡рд▓ рдПрдХ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рд╣реИ), рдЬрд┐рд╕рдореЗрдВ рдРрд╕реА рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдЧреА рдЬреЛ .csproj рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрди рджреЛ рдбреЗрдЯрд╛ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред
<?xml version="1.0" encoding="utf-8"?> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>$id$</id> <title>$title$</title> <version>$version$</version> <authors>$author$</authors> <owners>$author$</owners> <requireLicenseAcceptance>false</requireLicenseAcceptance> <licenseUrl>https://choosealicense.com/licenses/mit/</licenseUrl> <projectUrl>https://gitlab.com/ilyak/ilyak.uipath.activities</projectUrl> <iconUrl>http://www.uipath.com/hubfs/Logos/uipath-nuget-logo.png</iconUrl> <description>$description$</description> <copyright>$copyright$</copyright> <tags>UiPath,Activity,Excel</tags> </metadata> <files> <file src="bin\Debug\IlyaK.UiPath.Activities.TutorialForHabr.dll" target="lib\net461\IlyaK.UiPath.Activities.TutorialForHabr.dll" /> </files> </package>
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, .nuspec рдХреА рд╕рдВрд░рдЪрдирд╛ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХреНрд╕рдПрдордПрд▓ рдХреЗ рд╕рд╛рде рдЧрдбрд╝рдмрдбрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдирд┐рдЪреНрдЫреБрдХ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдПрдбрд┐рдЯрд░ рдиреБрдЧреЗрдЯ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред $copyright
рдЬреИрд╕реЗ рдЪрд░ .dll рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рд╣рд┐рдд рдЬрд╛рдирдХрд╛рд░реА рд╕реЗ рд▓рд┐рдП рдЧрдП рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗред
рдЕрдм рд╣рдо рдЕрдкрдиреЗ .nuspec рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рд▓реНрдб рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдорд┐рд▓реЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЧреБрдг рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдмрд┐рд▓реНрдб рдИрд╡реЗрдВрдЯ рдЯреИрдм рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред
рдкреЛрд╕реНрдЯ-рдмрд┐рд▓реНрдб рдИрд╡реЗрдВрдЯ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдЬрд╛рджреВ рд╢рдмреНрдж рд▓рд┐рдЦреЗрдВ
IF EXIST "$(ProjectDir)$(OutDir)*.nupkg" del "$(ProjectDir)$(OutDir)*.nupkg" nuget.exe pack "$(ProjectPath)" IF EXIST "$(ProjectDir)$(OutDir)*.nupkg" xcopy /Y "$(ProjectDir)$(OutDir)*.nupkg" "C:\Program Files (x86)\UiPath\Studio\Packages\"
рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ, рд░реВрд╕реА рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд
- рдкреБрд░рд╛рдиреЗ рдкреИрдХреЗрдЬ рдХреЛ рдЙрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╣рдЯрд╛рдПрдВ рдЬрд╣рд╛рдВ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
- .Csproj рдФрд░ .nuspec рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рдмрдирд╛рдПрдБ
- рдЗрд╕реЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд░рдЦреЗрдВ
C:\Program Files (x86)\UiPath\Studio\Packages\
рдпрд╣ рдлреЛрд▓реНрдбрд░ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ UiPath рд╕реНрдЯреВрдбрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╕реНрдерд╛рдиреАрдп рдкреИрдХреЗрдЬ рднрдВрдбрд╛рд░ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдПрдХ рдирдпрд╛ рдкреИрдХреЗрдЬ рд╡рд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд░реЛрдмреЛрдЯрд╛рдЗрдЬреЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

NB рд╕реНрдерд╛рдиреАрдп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рдкрде рдХреЛ UiPath рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╣реЛрдиреЗ рдкрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХреЙрдкреА рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛред

рдпрд╣реА рд╕рдм рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрдзрд╛рдИ!
рдПрдирдмреА рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╕реНрдорд╛рд░реНрдЯ рд╕реНрдЯреВрдбрд┐рдпреЛ рдиреЗ рдЦреБрдж рд╣реА рд╣рдорд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реНрд░реЗрдгреА рдмрдирд╛рдИ рдереА, рдЬрд┐рд╕рдореЗрдВ рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╕реНрддрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдбреЙрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рдирд╛рдо рдкрд░ рдмрдбрд╝реЗ рдЕрдХреНрд╖рд░реЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рд╕реНрдерд╛рди рд░рдЦрд╛ рдерд╛ред
рд▓реЗрдЦ рдХрд╛ рдЕрдЧрд▓рд╛ рднрд╛рдЧ "рдкреВрд░реНрд╡рд╛рднрд╛рд╕" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реЛрдЧрд╛: рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рджреГрд╢реНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП, рдПрдХ рдЖрдЗрдХрди рдФрд░ рд╕реНрдерд╛рдиреАрдп рдкрд╛рдареЛрдВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░реЗрдВред
рд╣рдо рдЧрдВрднреАрд░рддрд╛ рд╕реЗ рдХрд░рдирд╛
рдЧреБрдг
рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓рд╛ рднрд╛рдЧ рдХрд╛рдлреА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдо рдПрдХ рд╢реНрд░реЗрдгреА рдЪреБрдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВ, рдпреБрдХреНрддрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрджрд┐ред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ рдЬреЛ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ, рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП:
[Category (" , ")] [DisplayName (" ")] [Description (" ")]
рдФрд░ рдРрд╕реЗ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓ рдЖрд╡рд╢реНрдпрдХ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
[RequiredArgument]
рд╕реНрдерд╛рдиреАрдпрдХрд░рдг
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реВрдХреНрд╖реНрдорддрд╛ рд╣реИ: рдпреВрдЖрдИрдкреИрде рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдПрдХреНрд╢рди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдФрд░ рдЙрдирдХреА рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХрд╛ рднреА рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдпрджрд┐ рд╣рдо рдЗрдирдкреБрдЯ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП [Category("Input")]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рдЕрдВрдЧреНрд░реЗрдЬреА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдпрд╣ рдЕрдкрдиреА рдЕрд▓рдЧ рдЗрдирдкреБрдЯ рд╢реНрд░реЗрдгреА рдореЗрдВ рдЖрдПрдЧрд╛, рдФрд░ рдорд╛рдирдХ рдЗрдирдкреБрдЯ рд╢реНрд░реЗрдгреА рдореЗрдВ рдирд╣реАрдВред рдПрдХ рд╣реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░реВрд╕реА рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдРрдк рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдПрдкреНрд▓реАрдХреЗрд╢рди рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди рдмрди рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдкрд╛рда рд╕реНрдерд┐рд░рд╛рдВрдХ рдХреЛ рднрд╛рд╖рд╛-рдирд┐рд░реНрднрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдпреБрдХреНрдд рдПрдХ рд╕реНрдерд╛рдиреАрдп рдлрд╝рд╛рдЗрд▓ рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдмрдирд╛рдПрдБ
Localization.cs using IlyaK.UiPath.Activities.TutorialForHabr.Properties; using System; using System.ComponentModel; namespace IlyaK.UiPath.Activities.TutorialForHabr { [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Module | AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Enum | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Interface | AttributeTargets.Parameter | AttributeTargets.Delegate | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter)] public class LocalizedCategoryAttribute : CategoryAttribute { public LocalizedCategoryAttribute(string category) : base(category) { } protected override string GetLocalizedString(string value) { return Resources.ResourceManager.GetString(value) ?? base.GetLocalizedString(value); } } [AttributeUsage(AttributeTargets.Property | AttributeTargets.Class)] public class LocalizedDisplayNameAttribute : DisplayNameAttribute { public LocalizedDisplayNameAttribute(string displayName) : base(displayName) { } public override string DisplayName { get { return Resources.ResourceManager.GetString(DisplayNameValue) ?? base.DisplayName; } } } public class LocalizedDescriptionAttribute : DescriptionAttribute { public LocalizedDescriptionAttribute(string displayName) : base(displayName) { } public override string Description { get { return Resources.ResourceManager.GetString(DescriptionValue) ?? base.Description; } } } }
рд╡рд╣ рд╣рдореЗрдВ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛
[Category("Name")
рдкрд░
[LocalizedCategory(nameof(Resources.CategoryName))]
рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
- рдЬрд┐рди рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд╣рдо рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рд░рд┐рд╕реЛрд░реНрд╕ рдлрд╛рдЗрд▓реНрд╕, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
Resources.resx
рдФрд░ Resources.ru.resx
ред Resources
рдлреЛрд▓реНрдбрд░ рдореЗрдВ Resources
( рдРрдб -> рдиреНрдпреВ рдЖрдЗрдЯрдо -> рд░рд┐рд╕реЛрд░реНрд╕ рдлрд╛рдЗрд▓ )ред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкрд╣реБрдБрдЪ рд╕рдВрд╢реЛрдзрдХ рдорд╛рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореЗрдВ рд╣реИ ред - рдХреНрд▓рд╛рд╕ рдПрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
using IlyaK.UiPath.Activities.TutorialForHabr.Properties;
рдФрд░ рдЙрдЪрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдФрд░ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ
[LocalizedCategory(nameof(Resources.AppIntegrationExcel))] [LocalizedDisplayName(nameof(Resources.TutorialForHabrName))] [LocalizedDescription(nameof(Resources.TutorialForHabrDescription))] public class TutorialForHabr : CodeActivity { [LocalizedCategory(nameof(Resources.Input))] [LocalizedDisplayName(nameof(Resources.RowName))] [LocalizedDescription(nameof(Resources.RowDescription))] public InArgument<Int32> Row { get; set; } [LocalizedCategory(nameof(Resources.Input))] [LocalizedDisplayName(nameof(Resources.ColumnName))] [LocalizedDescription(nameof(Resources.ColumnDescription))] public InArgument<Int32> Column { get; set; } [LocalizedCategory(nameof(Resources.Output))] [LocalizedDisplayName(nameof(Resources.CellName))] [LocalizedDescription(nameof(Resources.CellDescription))] }
- рд░реВрд╕реА рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рдиреВрдЧреЗрдЯ рдкреИрдХреЗрдЬ рдореЗрдВ рдЖрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ .PSec рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рд╕рдореВрд╣ рдореЗрдВ рдПрдХ рдФрд░ рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
<files> <file src="bin\Debug\IlyaK.UiPath.Activities.TutorialForHabr.dll" target="lib\net461\IlyaK.UiPath.Activities.TutorialForHabr.dll" /> <file src="bin\Debug\ru\**" target="lib\net461\ru\" /> </files>
рдбрд┐рдЬрд╛рдЗрдирд░
рд╣рдорд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реБрдВрджрд░ рджрд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЧреБрдгреЛрдВ рдореЗрдВ рдХреНрд░реЙрд▓ рдХрд┐рдП рдмрд┐рдирд╛ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдпреВрдЖрдИ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдПрдХреНрд╕рдПрдПрдордПрд▓ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рдорджрдж рд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рднрд╛рдЧ рдХреЛ рдЕрднреА рднреА рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рддрдп рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдЖрдкрдХреЛ рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд╛рдХрд╛ рджреВрдВрдЧрд╛, рдФрд░ рдлрд┐рд░ Microsoft рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рджреЗрдЦрдиреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред
Resources
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдЖрдЗрдХрди рдбрд╛рд▓реЗрдВред рд╕рдВрд╕рд╛рдзрди рдкрд░ рд╕реЗрдЯ рдмрд┐рд▓реНрдб рдПрдХреНрд╢рди рдХреЗ рдЧреБрдгреЛрдВ рдореЗрдВ ( рдПрдВрдмреЗрдбреЗрдб рд╕рдВрд╕рд╛рдзрди рдирд╣реАрдВ)Designer
рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдПрдХ рдирдпрд╛ рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдбрд┐рдЬрд╝рд╛рдЗрдирд░ ( рдРрдб -> рдирдпрд╛ рдЖрдЗрдЯрдо -> рдПрдХреНрдЯрд┐рд╡рд┐рдЯреА рдбрд┐рдЬрд╝рд╛рдЗрдирд░ ) рдмрдирд╛рдПрдБ рдФрд░ рдЗрд╕реЗ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓рдлрд╝реЛрд░рд╣рдмрд░ рдХрд╣реЗрдВ
TutorialForHabr.xaml <sap:ActivityDesigner x:Class="IlyaK.UiPath.Activities.TutorialForHabr.Designer.TutorialForHabrDesigner" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:resource="clr-namespace:IlyaK.UiPath.Activities.TutorialForHabr.Properties" xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation" xmlns:sapc="clr-namespace:System.Activities.Presentation.Converters;assembly=System.Activities.Presentation" xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation"> <sap:ActivityDesigner.Resources> <ResourceDictionary> <sapc:ArgumentToExpressionConverter x:Key="ArgumentToExpressionConverter" /> </ResourceDictionary> </sap:ActivityDesigner.Resources> <DockPanel Width="200"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="70"></ColumnDefinition> <ColumnDefinition Width="130"></ColumnDefinition> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition></RowDefinition> <RowDefinition></RowDefinition> </Grid.RowDefinitions> <TextBlock Grid.Row="0" Grid.Column="0" Text="{x:Static resource:Resources.RowName}" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,5,0"></TextBlock> <sapv:ExpressionTextBox Grid.Row="0" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="{x:Type s:Int32}" HintText="{x:Static resource:Resources.RowDescription}" Expression="{Binding Path=ModelItem.Row, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}"/> <TextBlock Grid.Row="1" Grid.Column="0" Text="{x:Static resource:Resources.ColumnName}" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,5,0"></TextBlock> <sapv:ExpressionTextBox Grid.Row="1" Grid.Column="1" OwnerActivity="{Binding Path=ModelItem}" ExpressionType="{x:Type s:Int32}" HintText="{x:Static resource:Resources.ColumnDescription}" Expression="{Binding Path=ModelItem.Column, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}"/> </Grid> </DockPanel> <sap:ActivityDesigner.Icon> <DrawingBrush> <DrawingBrush.Drawing> <ImageDrawing> <ImageDrawing.Rect> <Rect Location="0,0" Size="32,32" ></Rect> </ImageDrawing.Rect> <ImageDrawing.ImageSource> <BitmapImage UriSource="/IlyaK.UiPath.Activities.TutorialForHabr;component/Resources/Tutorial_32x32.png"></BitmapImage> </ImageDrawing.ImageSource> </ImageDrawing> </DrawingBrush.Drawing> </DrawingBrush> </sap:ActivityDesigner.Icon> </sap:ActivityDesigner>
рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдо рд╕реНрдерд╛рдиреАрдп рд▓реЗрдмрд▓ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ:
<TextBlock Grid.Row="0" Grid.Column="0" Text="{x:Static resource:Resources.RowName}" VerticalAlignment="Center" HorizontalAlignment="Right" Margin="0,0,5,0" />
, рдФрд░ рдпрд╣ рдЗрдирдкреБрдЯ рдХреНрд╖реЗрддреНрд░ рд╣реИред ExpressionType
рдлрд╝реАрд▓реНрдб рдкреНрд░рдХрд╛рд░, HintText
- рдПрдХ рд╕рдВрдХреЗрдд (рдЧреНрд░реЗ рдкрд╛рда) рдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, Expression
рд╣рдорд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдорд╛рди рдХреЛ HintText
рд╣реИ
<sapv:ExpressionTextBox OwnerActivity="{Binding Path=ModelItem}" Grid.Row="0" Grid.Column="1" ExpressionType="{x:Type s:Int32}" HintText="{x:Static resource:Resources.RowDescription}" Expression="{Binding Path=ModelItem.Row, Converter={StaticResource ArgumentToExpressionConverter},ConverterParameter=In, Mode=TwoWay}" />
NB рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ BitmapImage рдЯреИрдЧ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░реЗрдВред рдЗрд╕рд▓рд┐рдП рд╣рдо рд╕рдВрд╕рд╛рдзрди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде рдЖрдЗрдХрди рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдмрд╣реБрдд рд╣реА рдирд╛рдЬреБрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рд╛рде рдЯрд┐рдВрдХрд░ рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИред
рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

- рдХреНрд░рд┐рдпрд╛рдПрдБ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ DesignerMetata рд╡рд░реНрдЧ рдмрдирд╛рдПрдБ
DesignerMetata.cs using System.Activities.Presentation.Metadata; using System.ComponentModel; namespace IlyaK.UiPath.Activities.TutorialForHabr.Design { public class DesignerMetadata : IRegisterMetadata { public void Register() { AttributeTableBuilder attributeTableBuilder = new AttributeTableBuilder(); attributeTableBuilder.AddCustomAttributes(typeof(TutorialForHabr), new DesignerAttribute(typeof(Designer.TutorialForHabrDesigner))); MetadataStore.AddAttributeTable(attributeTableBuilder.CreateTable()); } } }
- рдмрд┐рд▓реНрдб рд░рди рдХрд░реЗрдВ
- рдФрд░ UiPath рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
NB рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рд▓рд┐рдП рд╡рд░реНрдХрдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдирдП рдкреИрдХреЗрдЬ рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдкреБрд░рд╛рдиреЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЕрд▓рдЧ рд╣реЛред рдРрд╕рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреБрдЫ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреНрд▓рдЧрдЗрди рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдмрд┐рд▓реНрдб рд╡рд░реНрдЬрди рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдРрдб-рдЗрди ред рдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВред
рдпрд╣рд╛рдВ рдЖрдЗрдХрди рдФрд░ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реА рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЕрдВрддрд┐рдо рджреГрд╢реНрдп рд╣реИ:

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