Skip to content

mazzy-ax/SysConfigFile

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

21 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

SysConfigFile 2.1

SysConfigFile – это класс, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… xml-Ρ„Π°ΠΉΠ»ΠΎΠ² Π² Microsoft Dynamics AX 2009, Microsoft Dynamics AX 2012 ΠΈ Axapta 4.0.

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСсколько экзСмпляров (инстансов) Аксапты - рабочая, тСстовая, для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Ρ‚.Π΄. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ экзСмпляр ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ копируСтся Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· тСстовых экзСмпляров (ΠΈ Π±Π°Π·Π°, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ создаСтся экзСмпляр-Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ Ρ€Π°Π±ΠΎΡ‡Π΅Π³ΠΎ экзСмпляра. Π—Π΅Ρ€ΠΊΠ°Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для BI-ΠΎΡ‚Ρ‡Π΅Ρ‚ΠΎΠ².

ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°Π·Π½Ρ‹Ρ… экзСмплярах ΠΈ Π±Π°Π·Π°, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ. Но ΠΏΡ€ΠΈ этом всС Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ этих экзСмпляров. НапримСр, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ экзСмпляр ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΡ‹Π»Π°Ρ‚ΡŒ письма, тСстовым экзСмплярам Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ внСшниС систСмы ΠΈΠ»ΠΈ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° запросы Π²Π½Π΅ΡˆΠ½ΠΈΡ… систСм. А Π·Π΅Ρ€ΠΊΠ°Π»ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½ΠΈΡ‡Π΅Π³ΠΎ Ρ€Π°Π·Π½ΠΎΡΠΈΡ‚ΡŒ.

Π’Π°ΠΊΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ экзСмпляра (инстанса) ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π²ΠΎ внСшнСм Ρ„Π°ΠΉΠ»Π΅ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π½Π° сСрвСрС.

Класс SysConfigFile

Класс SysConfigFile ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚:

  1. ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ хранятся Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π½Π° сСрвСрС Π² Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… xml-Ρ„Π°ΠΉΠ»Π°Ρ… с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .config ΠΈΠ»ΠΈ .config.xml
  2. имя config-Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Axapta (имя ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π² new ΠΈΠ»ΠΈ Π² конструкторС)
  3. ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ %Appl%\Config (ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ Π² new ΠΈΠ»ΠΈ Π² конструкторС, ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π² parm-ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅)
  4. ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ хранится ΠΊΠ°ΠΊ xml-элСмСнт, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° хранится ΠΊΠ°ΠΊ тСкстовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ xml-элСмСнта. НапримСр, <name>Microsoft Dynamics AX</name>
  5. пустыС xml-элСмСнты Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ true ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ getBoolean ΠΈ ΠΊΠ°ΠΊ пустоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ get. Π‘ΠΌ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ config-Ρ„Π°ΠΉΠ»Π°
  6. Π²Π°Π»ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ 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-Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠšΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ 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>

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ X++

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ %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 Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. Π Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°Ρ… с ΠΎΠ΄Π½ΠΎΠΉ стороны сниТаСт Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² ΠΏΡ€ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², с Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ ΠΊΡΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ config-Ρ„Π°ΠΉΠ»Π° Π±ΠΎΠ»Π΅Π΅ эффСктивным.

Если ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ хранятся Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ PrintSrv.config, Ρ‚ΠΎ достаточно Π² конструкторС ΠΈΠ»ΠΈ Π² статичСском ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ:

SysConfigFile::construct('PrintSrv').get('id');

SysConfigFile::value('id', 'PrintSrv');

ΠŸΡ€ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, Π³Π΄Π΅ хранится ΠΊΠΎΠ½Ρ„ΠΈΠ³ (см. Ρ‚Π΅ΡΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ класс SysConfigFileTest). По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ класс ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Config Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° прилоТСния. К ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ прилоТСния %Appl% Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ ΠΈΠΌΠ΅ΡŽΡ‚ доступ всС AOS кластСра. Если Π°Π΄ΠΌΠΈΠ½Ρ‹ Π½Π΅ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ»ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ доступ ΠΊ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π°ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ %Appl%, Ρ‚ΠΎ ΠΊ ΠΏΠΎΠ΄ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Ρƒ %Appl%\Config доступ скорСС всСго Π±ΡƒΠ΄Π΅Ρ‚.

Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ config-Ρ„Π°ΠΉΠ»ΠΎΠ²

Начиная с вСрсии 2.1 класс SysConfigFile пытаСтся Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π² Ρ„Π°ΠΉΠ»Π°Ρ… с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .config, .config.xml, .xml, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Ρ„Π°ΠΉΠ»Π΅ с ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.

Если Π² Config-ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ присутствуСт нСсколько ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ, Π½ΠΎ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡΠΌΠΈ, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ порядкС: .config, .config.xml, .xml, пустоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅.

Если Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½, Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΈ ΠΏΡ€Π΅ΠΆΠ΄Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ имя с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ .config.

Π’Π°Ρ€ΠΈΠ°Π½Ρ‚ "Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ" позволяСт программисту ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π² Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ³Π° Ρ‚ΠΎ имя Ρ„Π°ΠΉΠ»Π°, ΠΊΠ°ΠΊΠΎΠ΅ Π΅ΠΌΡƒ хочСтся, ΠΈ Π½Π΅ парится ΠΎ ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡΡ….

Π‘ΠΌ. ΠΌΠ΅Ρ‚ΠΎΠ΄ filePath()

Валидация

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° синтаксиса config-Ρ„Π°ΠΉΠ»Π°

Класс SysConfigFile ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ аксаптовскиС классы для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с xml. Π­Ρ‚ΠΈ классы всСгда Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ xml синтаксиса ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ тСкста - Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ well formed xml. Π‘ΠΌ.Ρ‚Π°ΠΊΠΆΠ΅ W3 well-formed, ΡΡ‚Π°Ρ‚ΡŒΡ

Валидация ΠΏΠΎ xsd-схСмС

Класс SysConfigFile ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ config-Ρ„Π°ΠΉΠ»Π° ΠΏΠΎ xsd-схСмС: https://www.w3.org/XML/Schema

Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ, программист Π΄ΠΎΠ»ΠΆΠ΅Π½ явно Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²: ensureFileValid, assertFileValid ΠΈΠ»ΠΈ checkFileValid. Если ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ Π½Π΅ Π²Ρ‹Π·Π²Π°Π½Ρ‹, Ρ‚ΠΎ класс выполняСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ синтаксиса ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ config-Ρ„Π°ΠΉΠ»Π°.

Xsd-схСма ΠΌΠΎΠΆΠ΅Ρ‚ хранится Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² рСсурсах AOT ΠΈΠ»ΠΈ Π² xsd-Ρ„Π°ΠΉΠ»Π΅ рядом с config-Ρ„Π°ΠΉΠ»ΠΎΠΌ, Π° ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ€ΠΈ создании класса. Класс опрСдСляСт Π½Π°Π·Π²Π°Π½ΠΈΠ΅ рСсурса Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ schemaResourceName, Π° Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΡƒΡ‚ΡŒ xsd-Ρ„Π°ΠΉΠ»Π° Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ schemaPath.

Валидация ΠΏΠΎ dtd Π½Π΅ выполняСтся

АксаптовскиС 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. Π”Π°ΠΉΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, Ссли Ρƒ вас получится.

RunOn = Server

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 - нСизмСняСмый ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Класс SysConfigFile создаСт нСизмСняСмыС (Immutable) ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ – всС Π·Π½Π°Ρ‡ΠΈΠΌΡ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ создании ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, хранятся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° ΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΠΎΠΊΠ° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ "ΠΆΠΈΠ²Π΅Ρ‚".

НСкоторыС Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ класса Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ своС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ нСобходимости (Lazy initialization) ΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ послС вычислСния.

Π’ частности, класс Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ содСрТимоС config-Ρ„Π°ΠΉΠ»Π° ΠΈ xsd-схСмы ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ ΠΈ схСмС, Π° Π² дальнСйшСм ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. БоотвСтствСнно значСния ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ· config-Ρ„Π°ΠΉΠ»Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ хранятся Π² глобальном кэшС. SysConfigFile Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· кэша, Ссли ΠΎΠ½ΠΎ Ρ‚Π°ΠΌ Π΅ΡΡ‚ΡŒ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· xml-Ρ„Π°ΠΉΠ»Π°.

ΠŸΡ€ΡΠΌΠΎΠΉ доступ ΠΊ 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 вмСсто Аксаптовских (ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅/ΡƒΡ‚Π΅Ρ‡ΠΊΡƒ памяти ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρƒ .net GC Π² связкС с GC-Аксапты Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий)
  • дальнСйшая минимизация Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром Аксапты: ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ нСсколько ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (Ρ€Π°Π·Π²ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ 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
  • Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ с 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', Π° Π½Π΅ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅! ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π½Π°ΠΉΠ΄Π΅Π½ Π² кэшС

2. Π₯очСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с config-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅

Π”Π°ΠΉΡ‚Π΅ Π·Π½Π°Ρ‚ΡŒ, Ссли Ρƒ вас Π΅ΡΡ‚ΡŒ прСдлоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΡΠ½ΠΈΠΆΠ°ΡŽΡ‚ Π½ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Π½ΠΈ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ Π² основном сцСнарии Ρ€Π°Π±ΠΎΡ‚Ρ‹.

SysConfigFile – сСрвСрный класс. Π­Ρ‚ΠΎ Ρ„ΠΈΡ‡Π°. Но ΠΈΠ½ΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с config-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅ (POS-Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Ρ‹, PinPad, ΠΊΠ»ΡŽΡ‡ΠΈ бСзопасности ΠΈ ΠΏΡ€ΠΎΡ‡Π΅Π΅ ΠΎΠ±ΠΎΡ€ΡƒΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅, сСртификаты ΠΈ софт, привязанный ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρƒ). ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, с клиСнтскими config-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ xml-Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ. Если ΠΆΠ΅ хочСтся ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ сСрвис SysConfigFile Π½Π° ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ:

  • ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π΄ΡƒΠ±Π»ΡŒ SysConfigFileClient
  • ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ свойство RunOn
  • ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ WinAPIServer Π½Π° WinAPI
  • ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄ parmDefaultDirectory ΠΈΠ»ΠΈ явно ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ ΠΏΠ΅Ρ€Π΅Π΄ запросом Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈΠ· ΠΊΠΎΠ½Ρ„ΠΈΠ³Π°

Благодарности

  • Бпасибо Π‘Π΅Ρ€Π³Π΅ΡŽ Π§Π΅Ρ‡ΠΊΠΈΠ½Ρƒ Π·Π° ΠΏΠΎΡ…ΠΎΠΆΠ΅ СдинствСнно Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ Π² аксаптовских классах способ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ xml ΠΏΠΎ схСмС
  • Бпасибо всСм Π·Π° конструктивноС обсуТдСниС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Disclaimer

  • Названия классов ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ², иСрархия ΠΈ порядок Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² Π½Π°Π±ΠΎΡ€Π΅ классов Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠΎ возмоТности ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡΡ, Π½ΠΎ это Π½Π΅ гарантируСтся - Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях SysConfigFile всС ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ.
  • Код Π² xpp-Ρ„Π°ΠΉΠ»Π°Ρ… ΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ ΠΈΠ· xpo Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для удобства использования Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ. ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΠΎΠΌ являСтся ΠΊΠΎΠ΄ Π² xpo-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…, отличия ΠΌΠ΅ΠΆΠ΄Ρƒ xpo ΠΈ xpp всСгда Ρ‚Ρ€Π°ΠΊΡ‚ΡƒΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ тСкста ΠΈΠ· xpo-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ².
  • ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π²Ρ‹Π»ΠΎΠΆΠ΅Π½ "ΠΊΠ°ΠΊ Π΅ΡΡ‚ΡŒ" ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ MIT: Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΊΠ°ΠΊ ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π±Π΅Π·ΠΎ всяких отчислСний, Π°Π²Ρ‚ΠΎΡ€ Π½Π΅ Π΄Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΉ ΠΈ Π½Π΅ нСсСт отвСтствСнности Π·Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΉ эффСкт ΠΎΡ‚ использования ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

ΠŸΡ€ΠΎΡ‡Π΅Π΅

  • ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сдСлан для классичСских вСрсий Аксапты
  • Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ xmldocs
  • README ΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΡΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сдСланы Π½Π° русском языкС
  • ошибки Π² ensure ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ… записаны простой строкой Π½Π° русском языкС ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠΊ

ChangeLog

ΠŸΠΎΠΌΠΎΡ‰ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ

Π‘ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚Π΅Π»Π΅Π½ Π·Π° ваши замСчания, прСдлоТСния ΠΈ совСты ΠΏΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ ΠΊΠ°ΠΊ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Issues, Ρ‚Π°ΠΊ ΠΈ Π² Π²ΠΈΠ΄Π΅ письма Π½Π° адрСс mazzy@mazzy.ru

ΠœΠ°Π·ΡƒΡ€ΠΊΠΈΠ½ Π‘Π΅Ρ€Π³Π΅ΠΉ (mazzy)

About

Class for Dynamics AX 2009, 2012 and AX4

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published