SysConfigFile β ΡΡΠΎ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ xml-ΡΠ°ΠΉΠ»ΠΎΠ² Π² Microsoft Dynamics AX 2009, Microsoft Dynamics AX 2012 ΠΈ Axapta 4.0.
ΠΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² (ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠ²) ΠΠΊΡΠ°ΠΏΡΡ - ΡΠ°Π±ΠΎΡΠ°Ρ, ΡΠ΅ΡΡΠΎΠ²Π°Ρ, Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Ρ.Π΄. ΠΡΠΈΡΠ΅ΠΌ Π·Π°ΡΠ°ΡΡΡΡ ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅ΡΡΠΎΠ²ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² (ΠΈ Π±Π°Π·Π°, ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π·Π°ΡΠ°ΡΡΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ-Π·Π΅ΡΠΊΠ°Π»ΠΎ ΡΠ°Π±ΠΎΡΠ΅Π³ΠΎ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°. ΠΠ΅ΡΠΊΠ°Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ BI-ΠΎΡΡΠ΅ΡΠΎΠ².
ΠΠΎΠ»ΡΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π² ΡΠ°Π·Π½ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°Ρ ΠΈ Π±Π°Π·Π°, ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ. ΠΠΎ ΠΏΡΠΈ ΡΡΠΎΠΌ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΡΡΡΠ»Π°ΡΡ ΠΏΠΈΡΡΠΌΠ°, ΡΠ΅ΡΡΠΎΠ²ΡΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌ Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡ Π²Π½Π΅ΡΠ½ΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π½Π° Π·Π°ΠΏΡΠΎΡΡ Π²Π½Π΅ΡΠ½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌ. Π Π·Π΅ΡΠΊΠ°Π»ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΡΠ°Π·Π½ΠΎΡΠΈΡΡ.
Π’Π°ΠΊΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ° (ΠΈΠ½ΡΡΠ°Π½ΡΠ°) ΡΠ΄ΠΎΠ±Π½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²ΠΎ Π²Π½Π΅ΡΠ½Π΅ΠΌ ΡΠ°ΠΉΠ»Π΅ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅.
ΠΠ»Π°ΡΡ SysConfigFile ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ:
- ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Ρ
ΡΠ°Π½ΡΡΡΡ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ Π² Π½Π΅Π±ΠΎΠ»ΡΡΠΈΡ
xml-ΡΠ°ΠΉΠ»Π°Ρ
Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ
.configΠΈΠ»ΠΈ.config.xml - ΠΈΠΌΡ config-ΡΠ°ΠΉΠ»Π° ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
Axapta(ΠΈΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π²newΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅) - ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
%Appl%\Config(ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π²newΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π² parm-ΠΌΠ΅ΡΠΎΠ΄Π΅) - ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΠΊΠ°ΠΊ xml-ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Ρ
ΡΠ°Π½ΠΈΡΡΡ ΠΊΠ°ΠΊ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ xml-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
<name>Microsoft Dynamics AX</name> - ΠΏΡΡΡΡΠ΅ xml-ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΡΠ°ΠΊΡΡΡΡΡΡ ΠΊΠ°ΠΊ
trueΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌgetBooleanΠΈ ΠΊΠ°ΠΊ ΠΏΡΡΡΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌget. Π‘ΠΌ. ΠΡΠΈΠΌΠ΅Ρ config-ΡΠ°ΠΉΠ»Π° - Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡΡ config-ΡΠ°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ xsd-ΡΡ Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Ρ ΡΠ°Π½ΠΈΡΡ Π² ΡΠ΅ΡΡΡΡΠ°Ρ ΠΠΊΡΠ°ΠΏΡΡ ΠΈΠ»ΠΈ Π² xsd-ΡΠ°ΠΉΠ»Π΅ ΡΡΠ΄ΠΎΠΌ Ρ config-ΡΠ°ΠΉΠ»ΠΎΠΌ. Π‘Ρ Π΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅
Π ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ Ρ ΠΎΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ. ΠΠΎ Π΄Π»Ρ ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠ»ΡΡΠ°Π΅Π² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π½Π°Π·Π²Π°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ XPath-Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ.
Π€ΠΎΡΠΌΠ°Ρ XML ΡΠ°ΠΌ ΠΏΠΎ ΡΠ΅Π±Π΅ Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π²Π½ΡΡΡΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΊΠ»Π°ΡΡ SysConfigFile ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (ΠΏΠ΅ΡΠ²ΠΎΠ΅), ΡΠ°ΠΊ ΠΈ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ
Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ
Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΌΠ΅ΡΠΎΠ΄ getBy ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π½ΡΠΆΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Π° Π½Π΅ Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΡ Π² xml-ΡΠ°ΠΉΠ»Π΅. Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π·Π΄Π΅Π» ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ.
ΠΠ»Π°ΡΡ SysConfigFile Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π΄Π°ΠΆΠ΅ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ config-ΡΠ°ΠΉΠ» ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ get-ΠΌΠ΅ΡΠΎΠ΄Ρ Π±ΡΠ΄ΡΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΊΠ»Π°ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π² ΡΠ°ΠΉΠ»Π΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ assert-, ensure- ΠΈ check- ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ². ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ::Value Π±ΡΠΎΡΠ°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ΅ΡΠΎΠ΄ ::ValueOrDefault Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π½Π΅Ρ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅. Π‘ΠΌ. Π£ΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ.
ΠΠ»Ρ ΡΠ°Π±ΠΎΡΡ Ρ XML-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΊΠ»Π°ΡΡ SysConfigFile ΠΏΠΎΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ XmlDocument. XmlDocument ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΊΠ°ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ XPath, Π½ΠΎ Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ xml-ΡΠ°ΠΉΠ» ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π² ΠΏΠ°ΠΌΡΡΡ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ»Π΅Π΄ΠΈΡΠ΅ Π·Π° ΡΠ°Π·ΠΌΠ΅ΡΠΎΠΌ config-ΡΠ°ΠΉΠ»Π°, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠΉΡΠ΅ ΡΡΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ ΡΡΠ°ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ. Π‘ΠΌ. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·Π½ΡΡ
config-ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
<?xml version="1.0" encoding="utf-8"?>
<config>
<id>PROD</id>
<name>Microsoft Dynamics AX</name>
<reportTemplateFolder>\\dax\template\</reportTemplateFolder>
<sender>Axapta</sender>
<sender email="note">Notification server</sender>
<sender email="mail">Company name</sender>
<AOS>
<batch serverId="01@AOS" />
<batch serverId="01@RESERV">true</batch>
</AOS>
</config>ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ %Appl%\Config\ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ ΡΠ°ΠΉΠ» Axapta.config Ρ ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠ° Π²ΡΡΠ΅. Π’ΠΎΠ³Π΄Π° ΠΊΠΎΠ΄ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ°ΠΊ (ΡΠΌ. ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ SysConfigFileTest.testExample):
SysConfigFile config = SysConfigFile::construct();
config.get('id'); // 'PROD'
config.get('notFound'); // ''
config.ensureExists('notFound').get(); // Π±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ
// Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ notFound ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ
config.getBoolean('AOS/batch'); // true
config.getBoolean('notFound'); // false
config.getAll('sender'); // ['Axapta','Notification server','Company name']
config.getAll('AOS/batch/@serverId'); // ['01@AOS','01@RESERV']
config.getAll('notFound'); // connull()
config.getBy(['sender[@email="mail"]','sender[not(@email)]']); // 'Company name'
config.getBy(['sender[@email="other"]','sender[not(@email)]']); // 'Axapta'ΠΡΠ»ΠΈ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΠΈ ΡΠ°ΠΊ:
SysConfigFile::value('name'); // 'Microsoft Dynamics AX'ΠΠ²Π° ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄Π° Value ΠΈ ValueOrDefault ΠΏΠΎ ΡΠ°Π·Π½ΠΎΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠΌΠΈ Π² config-ΡΠ°ΠΉΠ»Π΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ:
SysConfigFile::valueOrDefault('notFound','DefaultValue'); // 'DefaultValue'
SysConfigFile::value('notFound'); // Π±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅Π§ΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΡ config-ΡΠ°ΠΉΠ»Π°, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ ensureFileValid ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·:
SysConfigFile config = SysConfigFile::construct().ensureFileValid();
config.get('id'); // 'PROD'
config.getBoolean('AOS/batch'); // trueΠΠΎΠ³Π΄Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΌΠ½ΠΎΠ³ΠΎ, ΡΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π² ΡΠ°Π·Π½ΡΡ config-ΡΠ°ΠΉΠ»Π°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠΉ config Π½Π° ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ. Π Π°Π·ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΡΠ°Π·Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³Π°Ρ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ² ΠΏΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ config-ΡΠ°ΠΉΠ»Π° Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ.
ΠΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Ρ
ΡΠ°Π½ΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ PrintSrv.config, ΡΠΎ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ΅ ΠΈΠ»ΠΈ Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°ΡΡ:
SysConfigFile::construct('PrintSrv').get('id');
SysConfigFile::value('id', 'PrintSrv');ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°ΡΡ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³, Π³Π΄Π΅ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ (ΡΠΌ. ΡΠ΅ΡΡΠΈΡΡΡΡΠΈΠΉ ΠΊΠ»Π°ΡΡ SysConfigFileTest). ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΊΠ»Π°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Config Π²Π½ΡΡΡΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ %Appl% Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΈΠΌΠ΅ΡΡ Π΄ΠΎΡΡΡΠΏ Π²ΡΠ΅ AOS ΠΊΠ»Π°ΡΡΠ΅ΡΠ°. ΠΡΠ»ΠΈ Π°Π΄ΠΌΠΈΠ½Ρ Π½Π΅ Π·Π°ΠΏΡΠ΅ΡΠΈΠ»ΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°ΠΌ Π²Π½ΡΡΡΠΈ %Appl%, ΡΠΎ ΠΊ ΠΏΠΎΠ΄ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ %Appl%\Config Π΄ΠΎΡΡΡΠΏ ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ Π±ΡΠ΄Π΅Ρ.
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 2.1 ΠΊΠ»Π°ΡΡ SysConfigFile ΠΏΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΉΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π² ΡΠ°ΠΉΠ»Π°Ρ
Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .config, .config.xml, .xml,
Π° ΡΠ°ΠΊΠΆΠ΅ Π² ΡΠ°ΠΉΠ»Π΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ.
ΠΡΠ»ΠΈ Π² Config-ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ
ΡΠ°ΠΉΠ»ΠΎΠ² Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ,
ΡΠΎ Π±ΡΠ΄Π΅Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ΅Π½ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Π² ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅: .config, .config.xml, .xml, ΠΏΡΡΡΠΎΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅.
ΠΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, ΡΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅ΠΆΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈΠΌΡ Ρ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠ΅ΠΌ .config.
ΠΠ°ΡΠΈΠ°Π½Ρ "Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ" ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΡΠΊΠ°Π·Π°ΡΡ Π² Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ½ΡΠΈΠ³Π° ΡΠΎ ΠΈΠΌΡ ΡΠ°ΠΉΠ»Π°, ΠΊΠ°ΠΊΠΎΠ΅ Π΅ΠΌΡ Ρ ΠΎΡΠ΅ΡΡΡ, ΠΈ Π½Π΅ ΠΏΠ°ΡΠΈΡΡΡ ΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΡ .
Π‘ΠΌ. ΠΌΠ΅ΡΠΎΠ΄ filePath()
ΠΠ»Π°ΡΡ SysConfigFile ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π°ΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ xml. ΠΡΠΈ ΠΊΠ»Π°ΡΡΡ Π²ΡΠ΅Π³Π΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ xml ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΏΡΠΈ Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠ΅ΠΊΡΡΠ° - ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ well formed xml. Π‘ΠΌ.ΡΠ°ΠΊΠΆΠ΅ W3 well-formed, ΡΡΠ°ΡΡΡ
ΠΠ»Π°ΡΡ SysConfigFile ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ config-ΡΠ°ΠΉΠ»Π° ΠΏΠΎ xsd-ΡΡ
Π΅ΠΌΠ΅: https://www.w3.org/XML/Schema
Π§ΡΠΎΠ±Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ²Π½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Ρ
ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²: ensureFileValid, assertFileValid ΠΈΠ»ΠΈ checkFileValid.
ΠΡΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π΅ Π²ΡΠ·Π²Π°Π½Ρ, ΡΠΎ ΠΊΠ»Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ config-ΡΠ°ΠΉΠ»Π°.
Xsd-ΡΡ
Π΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Ρ
ΡΠ°Π½ΠΈΡΡΡ ΡΠ΅Π½ΡΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² ΡΠ΅ΡΡΡΡΠ°Ρ
AOT ΠΈΠ»ΠΈ Π² xsd-ΡΠ°ΠΉΠ»Π΅ ΡΡΠ΄ΠΎΠΌ Ρ config-ΡΠ°ΠΉΠ»ΠΎΠΌ, Π° ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π΄Π°Π²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°. ΠΠ»Π°ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠ° Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ schemaResourceName, Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡΡΡ xsd-ΡΠ°ΠΉΠ»Π° Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ schemaPath.
ΠΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΈΠ΅ xml-ΠΊΠ»Π°ΡΡΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΠΎ DTD (Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° DTD ΠΊΠ°ΠΊ ΠΏΠΎΠ΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° xml).
Π‘ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Microsoft ΡΡΠΈΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΡ Ρ DTD ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ: https://msdn.microsoft.com/en-us/magazine/ee335713.aspx.
ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΈΠ·-Π·Π° "xml bomb" (Π³ΡΠ³Π»ΠΈΡΠ΅).
ΠΠΎ-Π²ΡΠΎΡΡΡ
, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π·Π°Π΄Π°Π΅Ρ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠ°ΠΉΠ»Π° Π²Π½ΡΡΡΠΈ ΡΡΠΎΠ³ΠΎ xml-ΡΠ°ΠΉΠ»Π°. Π Π΄Π°Π»Π΅ΠΊΠΈΠ΅ 2000Π΅ Π² ΡΡΠΎΠΌ Π½Π΅ Π²ΠΈΠ΄Π΅Π»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π½ΠΎ ΡΠΆΠ΅ Π² 2010Π΅ ΡΡΠ°Π»ΠΈ ΡΡΠΈΡΠ°ΡΡ, ΡΡΠΎ Π΄ΠΎΠ²Π΅ΡΡΡΡ ΡΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ ΡΠ°ΠΉΠ»Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ Π½Π°ΠΈΠ²Π½ΠΎ ΠΈ ΠΎΠΏΠ°ΡΠ½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ, Π² Π°ΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΈΡ
xml-ΠΊΠ»Π°ΡΡΠ°Ρ
Π΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ prohibitDtd. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΎΠ½ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ true.
Π£ ΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΈΠ½Π³ DTD Π² Π°ΠΊΡΠ°ΠΏΡΠ΅ Π΄Π°ΠΆΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π² false Π² ΠΌΠ΅ΡΠΎΠ΄ prohibitDtd. ΠΠ°ΠΉΡΠ΅ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ.
SysConfigFile β ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ (ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ RunOn = Server Π² ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ
AOT). Π’Π°ΠΊ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ:
- ΠΊΠ»Π°ΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠΈΡΠ°Π» config-ΡΠ°ΠΉΠ» Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°
- Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΡΠ°ΡΡΠ°ΡΠΈΠ²Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Ρ ΠΊΠΎΠ½ΡΠΈΠ³Π°ΠΌΠΈ Π² ΡΠ΅ΡΠΈ (Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅, VPN)
- Π½Π΅ ΠΏΡΡΠ°ΡΡΡΡ Ρ ΠΏΡΡΡΠΌΠΈ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ (Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅, ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΠΏΡΡΠΈ)
- Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ ΠΎ ΠΏΡΠ°Π²Π°Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈ AOSΠΎΠ² ΠΊ ΠΊΠΎΠ½ΡΠΈΠ³Π°ΠΌ (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅)
ΠΠΎ ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ² ΡΡΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ· ΠΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΌΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ. ΠΠΎΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΡΠΈΠΌ ΠΊΠ»Π°ΡΡΠΎΠΌ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ².
Π§ΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ
ΠΎΠ΄Ρ Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ
ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΠΌΠ΅ΡΠΎΠ΄ getAll Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ container, Π° Π½Π΅ ΡΠΎΡΡΠ°Π²Π½ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠΎ ΡΡΠΎΠΉ ΠΆΠ΅ ΠΏΡΠΈΡΠΈΠ½Π΅ ΠΌΠ΅ΡΠΎΠ΄ getBy ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ container ΠΊΠ°ΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ.
ΠΡΠ»ΠΈ ΠΆΠ΅ ΠΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΎΠΌΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΡΠΎ ΡΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΠ°ΠΊΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π² container. Π‘ΠΌ. ΡΠ°ΠΊΠΆΠ΅ ΠΠ°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄Π»Ρ ΡΠ°Π·Π²ΠΈΡΠΈΡ.
ΠΠ»Π°ΡΡ ΠΊΡΡΠΈΡΡΠ΅Ρ ΠΈ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅, ΠΈ ΠΎΡΡΡΡΡΡΠ²ΡΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΊΡΡΠ΅. ΠΠΎΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΠΉ get Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ, Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ config-ΡΠ°ΠΉΠ»Π°.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ SysConfigFile β ΡΡΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ, ΡΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΠΊΡΡ. Π ax4 ΠΈ ax2009 Π² ΠΌΠ΅ΡΠΎΠ΄Π΅ globalCache Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ appl.globalCache. Π ax2012 Ρ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ classFactory.globalObjectCache. ΠΠ° ΡΠ²ΠΎΠ΅ΠΌ ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΡΡΠΈ ΠΈΠ· appl, infolog ΠΈΠ»ΠΈ classFactory.
ΠΠ»Π°ΡΡ SysConfigFile ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² startup ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°Ρ
, ΠΊΠΎΠ³Π΄Π° Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ appl, info, classFactory Π΅ΡΠ΅ Π½Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Ρ. ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΊΠ»Π°ΡΡ ΡΠΎΠ·Π΄Π°Π΅Ρ ΡΠ²ΠΎΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΆΠΈΡΡ ΠΏΠΎΠΊΠ° ΠΆΠΈΠ²Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ SysConfigFile.
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° SysConfigFile ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΠΈΡΠ°Π΅Ρ config-ΡΠ°ΠΉΠ» ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, Π° ΠΏΠΎΡΠΎΠΌ Ρ
ΡΠ°Π½ΠΈΡ xmlRoot ΠΏΠΎΠΊΠ° ΠΆΠΈΠ²Π΅Ρ. ΠΠΎΡΡΠΎΠΌΡ, Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³Π°, ΡΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ get, Π° Π½Π΅ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ::value. ΠΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ ΡΠΈΡΠ»ΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΠ΅Π½ΠΈΠΉ config-ΡΠ°ΠΉΠ»Π°.
ΠΠ»Π°ΡΡ SysConfigFile ΡΠΎΠ·Π΄Π°Π΅Ρ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ (Immutable) ΠΎΠ±ΡΠ΅ΠΊΡΡ β Π²ΡΠ΅ Π·Π½Π°ΡΠΈΠΌΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΏΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°, Ρ
ΡΠ°Π½ΡΡΡΡ Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΠΎΠΊΠ° ΠΎΠ±ΡΠ΅ΠΊΡ "ΠΆΠΈΠ²Π΅Ρ".
ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΠ° Π²ΡΡΠΈΡΠ»ΡΡΡ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ (Lazy initialization) ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ.
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΠΊΠ»Π°ΡΡ ΡΠΈΡΠ°Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ config-ΡΠ°ΠΉΠ»Π° ΠΈ xsd-ΡΡ
Π΅ΠΌΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΈ ΡΡ
Π΅ΠΌΠ΅, Π° Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΆΠ΅ ΠΏΡΠΎΡΠΈΡΠ°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² ΡΠΈΡΠ°ΡΡΡΡ ΠΈΠ· config-ΡΠ°ΠΉΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ Ρ
ΡΠ°Π½ΡΡΡΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΌ ΠΊΡΡΠ΅. SysConfigFile Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΊΡΡΠ°, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΎ ΡΠ°ΠΌ Π΅ΡΡΡ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· xml-ΡΠ°ΠΉΠ»Π°.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ ΠΊΠΎΠ½ΡΠΈΠ³Π° ΠΈ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΉ ΡΠ΅ΠΊΡΡ xsd-ΡΡ
Π΅ΠΌΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² file() ΠΈ schema().
ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΊΠ»Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ xmlDocument(), xmlRoot() ΠΈ xmlSchema(), ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ»ΠΈ Π²Ρ Ρ
ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ xml-ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠΌΡ, ΡΠΎ ΡΠ΄Π΅Π»Π°ΠΉΡΠ΅ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΈ ΡΠ°Π±ΠΎΡΠ°ΠΉΡΠ΅ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ xml.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ SysConfigFile β ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ. ΠΠ΅ ΠΎΠ±ΡΠ°ΡΠ°ΠΉΡΠ΅ΡΡ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ xmlDocument() ΠΈ xmlSchema() ΠΈΠ· ΠΊΠ»ΠΈΠ΅Π½ΡΠ° β ΠΊΠ»ΠΈΠ΅Π½Ρ-ΡΠ΅ΡΠ²Π΅ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΡΠ°ΡΡ
ΠΎΠ΄Π°ΠΌΠΈ.
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΈΡΡΠ²Π°ΠΉΡΠ΅, ΡΡΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ
Π²Π΅ΡΡΠΈΡΡ
ΠΊΠ»Π°ΡΡ SysConfigFile ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΡΠ°Π±ΠΎΡΡ Ρ xml.
ΠΠ»Π°ΡΡ SysConfigFile ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ°Π½ ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π² ΡΠΈΡΡΠ°ΡΠΈΡΡ
, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠ³ΡΡ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ»Π°ΡΡ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ Π² ΡΠ²Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π±ΡΠΎΡΠ°Π΅Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ensure- ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
. ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°ΠΌΠΎ ΡΠ΄ΡΠΎ ΠΠΊΡΠ°ΠΏΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ±ΡΠΎΡΠΈΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ (exception) Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΏΠ°ΡΡΠΈΠ½Π³Π° xml Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
XmlDocument::newFile() ΠΈ XmlSchema::newFile() Π΅ΡΠ»ΠΈ:
- xml-ΡΠ°ΠΉΠ» ΠΈΠ»ΠΈ xsd-ΡΡ
Π΅ΠΌΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅Π·Π°ΠΊΡΡΡΡΠ΅ ΡΠ΅Π³ΠΈ, Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΡΠ΅Π³ΠΈ,
",&,<,>ΠΈΠ»ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ - xsd-ΡΡ Π΅ΠΌΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π΅ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π°ΡΡΠΈΠ±ΡΡΡ ΠΈΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ
ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ Π² ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ
ΠΠΊΡΠ°ΠΏΡΠ°Ρ
ΠΈΠΌΠ΅Π΅Ρ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ: catch Π±Π»ΠΎΠΊΠΈ Π²Π½ΡΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ Π½Π΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ, ΠΠΊΡΠ°ΠΏΡΠ° Π²ΡΠΏΡΡΠ³ΠΈΠ²Π°Π΅Ρ Π·Π° ΡΠ°ΠΌΡΠΉ Π²Π½Π΅ΡΠ½ΠΈΠΉ transaction-Π±Π»ΠΎΠΊ ΠΈ ΠΈΡΠ΅Ρ catch ΡΠΆΠ΅ ΡΠ°ΠΌ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» Exception handling inside transaction Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ). ΠΠΎΡΡΠΎΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π΅ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΠΉ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠ΄ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ.
ΠΠΎΡΡΠΎΠΌΡ Π΅ΡΠ»ΠΈ config-ΡΠ°ΠΉΠ»Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ xml, ΡΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΌΠΎΠ³ΡΡ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° ensure-, assert- ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ::Value, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π²Π΅ΡΠ½ΡΡ Π±ΠΎΠ»Π΅Π΅-ΠΌΠ΅Π½Π΅Π΅ ΠΎΡΠΌΡΡΠ»Π΅Π½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ.
Π Π²Π΅ΡΡΠΈΠΈ 2.0 ΠΊΠ»Π°ΡΡ SysConfigFile ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π» ΠΠΊΡΠ°ΠΏΡΡ ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ .net ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π΅ΡΠ½ΡΡΡ Π² Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ CodePermission. ΠΠΎΡΡΠΎΠΌΡ Π²Π°ΠΌ Π½Π΅ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π½ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΡ, Π½ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ CodePermissions Π² ΡΠ²ΠΎΠΉ ΠΊΠΎΠ΄.
ΠΠ»Π°ΡΡ SysConfigFile ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ:
- System.IO.File::Exists
- System.String::Copy
- System.String.Trim
Π’Π΅ΡΡΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ SysConfigFileTest ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ:
- System.IO.Path::GetTempPath
- System.IO.Directory::CreateDirectory
- System.IO.Directory::Delete
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
.netΠΊΠ»Π°ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ xml Π²ΠΌΠ΅ΡΡΠΎ ΠΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΈΡ (ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅/ΡΡΠ΅ΡΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠ°Π±ΠΎΡΡ.netGC Π² ΡΠ²ΡΠ·ΠΊΠ΅ Ρ GC-ΠΠΊΡΠ°ΠΏΡΡ ΡΠ°Π·Π½ΡΡ Π²Π΅ΡΡΠΈΠΉ)- ΡΠΈΡΠ°ΡΡ ΠΈΠ· Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² xml, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π°
.netxml
- ΡΠΈΡΠ°ΡΡ ΠΈΠ· Π·Π°ΡΠΈΡΡΠΎΠ²Π°Π½Π½ΡΡ
ΡΠ°Π·Π΄Π΅Π»ΠΎΠ² xml, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡΡ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ Π½Π°
- Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ°Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΡΡΠ°ΡΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΠΊΡΠ°ΠΏΡΡ: ΠΏΡΠΈΠ½ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ΅ ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ (ΡΠ°Π·Π²ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄
getAll)- Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠΎΠΈΡ Π²Π΅ΡΠ½ΡΡΡ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π½Π½ΡΠΉ map
- Π΄ΠΎΠ±Π°Π²ΠΈΡΡ
getDate,getTime,getDateTime, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΡΠΌΠ½ΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΡ ΡΠΎΡΠΌΠ°ΡΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉΡΡ xsd-ΡΡ Π΅ΠΌΠ°ΠΌΠΈxs:date,xs:time,xs:dateTime, Π² ΠΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΈΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Ρ ΡΠΈΠΏΠΎΠΌDate,TimeΠΈDateTimeΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ- ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠ° ISO 8601:
yyyy-mm-ddThh:mm - ΠΠΎΠ΄ΡΠΌΠ°ΡΡ Π² ΠΊΠ°ΠΊΠΎΠΌ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈ ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΡΠ΅ΡΡΡ ΡΠ°ΡΠΎΠ²ΠΎΠΉ ΠΏΠΎΡΡ
yyyy-mm-ddThh:mmZ###(Π° ΠΊΠ°ΠΊ Π΄Π»Ρ ax4?) - ΠΠΎΠ΄ΡΠΌΠ°ΡΡ ΡΡΠΎΠΈΡ Π»ΠΈ Π΄Π΅Π»Π°ΡΡ ΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ (Π° ΠΊΠ°ΠΊ Π΄Π»Ρ ax4?)
- ΡΠΌ. ΡΠ°ΠΊΠΆΠ΅
Global::xmlstring
- ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΡΠΎΡΠΌΠ°ΡΠ° ISO 8601:
- Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Ρ
namespaceΠ² config-ΡΠ°ΠΉΠ»Π΅ (Π½ΡΠΆΠ½ΠΎ Π»ΠΈ?) - ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ»Π°ΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠΎΠΆΠ΅Ρ ΡΠΈΡΠ°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΈΠ· ΡΠ΅Π΅ΡΡΡΠ°, Π° Π½Π΅ ΠΈΠ· ΡΠ°ΠΉΠ»Π°. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠ°ΡΠΎΡΡ ΡΠΌΠΎΠ³ΡΡ ΡΠ°ΡΠΊΠ°ΡΡΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌ ΡΠ΅ΡΠ΅Π· Π³ΡΡΠΏΠΏΠΎΠ²ΡΠ΅ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ
1. XML ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΡ Π² Π·Π°ΠΏΡΠΎΡΠ΅, ΠΊΡΡ Π½Π΅ ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΡ
ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΡΠ΅Π΄ΠΊΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π² ax4 ΠΈ ax2009 ΠΈ Π½Π΅ ΠΎΡΠΎΠ±ΠΎ ΠΌΠ΅ΡΠ°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ (Π² ΡΠ΅Π»ΠΎΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ) ΠΊΠ»Π°ΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π² ax2012 ΠΊΠ»Π°ΡΡ SysGlobalObjectCache ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Ρ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΡΡΠΎΠΌΡ Ρ ΡΠ΅ΡΠΈΠ» ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ. ΠΠ°ΠΉΡΠ΅ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ Π΄Π°Π½Π½ΠΎΠΌΡ ΠΏΡΠ½ΠΊΡΡ.
ΠΡΠ΅ΠΆΠ΄Π΅ Π²ΡΠ΅Π³ΠΎ, ΠΏΡΠΈΠ²ΡΠΊΡΠΈΠ΅ ΠΊ ΠΠΊΡΠ°ΠΏΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π·Π°Π±ΡΠ²Π°ΡΡ ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ XML. Π ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ Π΄Π΅Π»Π°ΡΡ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΏΠΎΠ»ΡΡΠΈΡΡ name Π²ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠΊΡ Ρ Name. Π ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Ρ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ XML.
ΠΠ° ΡΠ΅Π³ΠΈΡΡΡΠΎΠ·Π°Π²ΠΈΡΠΈΠΌΡΠΉ XML Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°Π΅ΡΡΡ ΠΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΈΠΉ ΠΠ Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ ΡΠ΅Π³ΠΈΡΡΡΠ° ΠΊΡΡ SysGlobalCache. ΠΠΎΡΡΠΎΠΌΡ Ρ ΡΡΠΈΠΌ ΠΊΡΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠΎΠ΄Π° Π±ΡΠ΄ΡΡ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ ΠΏΠΎ ΡΠ°Π·Π½ΠΎΠΌΡ (Π²Π½Π΅Π·Π°ΠΏΠ½ΠΎ!):
SysConfigFile::value('Name'); // Π±ΡΠΎΡΠΈΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ xPath Π·Π°ΠΏΡΠΎΡ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Ρ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° Π² XML-ΡΠ°ΠΉΠ»Π΅
SysConfigFile::value('name');SysConfigFile::value('name'); // 'Microsoft Dynamics AX'
SysConfigFile::value('Name'); // 'Microsoft Dynamics AX', Π° Π½Π΅ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅! ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ Π² ΠΊΡΡΠ΅ΠΠ°ΠΉΡΠ΅ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ ΡΠ½ΠΈΠΆΠ°ΡΡ Π½ΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π½ΠΈ ΡΡΠΎΠ²Π΅Π½Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΉ Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΡΡΠ΅Π½Π°ΡΠΈΠΈ ΡΠ°Π±ΠΎΡΡ.
SysConfigFile β ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠ»Π°ΡΡ. ΠΡΠΎ ΡΠΈΡΠ°. ΠΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ config-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅ (POS-ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Ρ, PinPad, ΠΊΠ»ΡΡΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ ΠΏΡΠΎΡΠ΅Π΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΈ ΡΠΎΡΡ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΌΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ). ΠΠΎΠ½Π΅ΡΠ½ΠΎ, Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΌΠΈ config-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΊ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ xml-ΡΠ°ΠΉΠ»Π°ΠΌΠΈ. ΠΡΠ»ΠΈ ΠΆΠ΅ Ρ
ΠΎΡΠ΅ΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΡΠ²ΠΈΡ SysConfigFile Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠ΅, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ:
- ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΡΠ±Π»Ρ
SysConfigFileClient - ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ
RunOn - ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ
WinAPIServerΠ½Π°WinAPI - ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ΅ΡΠΎΠ΄
parmDefaultDirectoryΠΈΠ»ΠΈ ΡΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΠΎΡΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³Π°
- Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π‘Π΅ΡΠ³Π΅Ρ Π§Π΅ΡΠΊΠΈΠ½Ρ Π·Π° ΠΏΠΎΡ ΠΎΠΆΠ΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ Π² Π°ΠΊΡΠ°ΠΏΡΠΎΠ²ΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠ°Ρ ΡΠΏΠΎΡΠΎΠ± Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ xml ΠΏΠΎ ΡΡ Π΅ΠΌΠ΅
- Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π²ΡΠ΅ΠΌ Π·Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½ΠΎΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
- ΠΠ°Π·Π²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΈΠ΅ΡΠ°ΡΡ ΠΈΡ ΠΈ ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π² Π½Π°Π±ΠΎΡΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² Π±ΡΠ΄ΡΡ ΠΏΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠΎΡ ΡΠ°Π½ΡΡΡΡΡ, Π½ΠΎ ΡΡΠΎ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ - Π² Π±ΡΠ΄ΡΡΠΈΡ Π²Π΅ΡΡΠΈΡΡ SysConfigFile Π²ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡΡ.
- ΠΠΎΠ΄ Π² xpp-ΡΠ°ΠΉΠ»Π°Ρ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ ΠΈΠ· xpo ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ. ΠΡΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ΄ Π² xpo-ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ , ΠΎΡΠ»ΠΈΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ xpo ΠΈ xpp Π²ΡΠ΅Π³Π΄Π° ΡΡΠ°ΠΊΡΡΡΡΡΡ Π² ΠΏΠΎΠ»ΡΠ·Ρ ΡΠ΅ΠΊΡΡΠ° ΠΈΠ· xpo-ΠΏΡΠΎΠ΅ΠΊΡΠΎΠ².
- ΠΡΠΎΠ΅ΠΊΡ Π²ΡΠ»ΠΎΠΆΠ΅Π½ "ΠΊΠ°ΠΊ Π΅ΡΡΡ" ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT: Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΡΠ³ΠΎΠ΄Π½ΠΎ Π±Π΅Π·ΠΎ Π²ΡΡΠΊΠΈΡ ΠΎΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, Π°Π²ΡΠΎΡ Π½Π΅ Π΄Π°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π³Π°ΡΠ°Π½ΡΠΈΠΉ ΠΈ Π½Π΅ Π½Π΅ΡΠ΅Ρ ΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎΡΡΠΈ Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°Ρ .
- ΠΏΡΠΎΠ΅ΠΊΡ ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°Π½ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ Π²Π΅ΡΡΠΈΠΉ ΠΠΊΡΠ°ΠΏΡΡ
- Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ xmldocs
- README ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΡΠΎΠ·Π½Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΄Π΅Π»Π°Π½Ρ Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅
- ΠΎΡΠΈΠ±ΠΊΠΈ Π² ensure ΠΌΠ΅ΡΠΎΠ΄Π°Ρ Π·Π°ΠΏΠΈΡΠ°Π½Ρ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡΡΠΎΠΊΠΎΠΉ Π½Π° ΡΡΡΡΠΊΠΎΠΌ ΡΠ·ΡΠΊΠ΅ ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ΅ΡΠΎΠΊ
ΠΡΠ΄Ρ ΠΏΡΠΈΠ·Π½Π°ΡΠ΅Π»Π΅Π½ Π·Π° Π²Π°ΡΠΈ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΡ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈ ΡΠΎΠ²Π΅ΡΡ ΠΏΠΎ ΠΏΡΠΎΠ΅ΠΊΡΡ ΠΊΠ°ΠΊ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ Issues, ΡΠ°ΠΊ ΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΈΡΡΠΌΠ° Π½Π° Π°Π΄ΡΠ΅Ρ mazzy@mazzy.ru
ΠΠ°Π·ΡΡΠΊΠΈΠ½ Π‘Π΅ΡΠ³Π΅ΠΉ (mazzy)