Ana içeriğe geç

ImportFromXml

XML verilerini belirtilen bir tabloya aktarır. Daha fazla bilgi için bkz. DataTable.ImportFromXml.

$Database.ImportFromXml(query: Columns : Array<Expression> : ( ... | ... )
Sütuna yönelik hesaplama veya dönüştürme içerebilen bir ifade.

Name : ( ... | ... )
Sonuçlarda kullanılacak sütunun adı. Belirtilmezse

XPath : ( ... | ... )
Verileri sütuna eşlemek için bir XPath ifadesi.
Sonuç kümesine dahil edilecek sütunların dizisi.

Map : (this: DataRow, node: Xml) => void
Sonuç kümesindeki her düğüme uygulanacak özel eşleyici işlevi.

MaxLength : number
Döndürülecek en yüksek satır sayısıdır. Belirtilmezse tüm satırlar döndürülür.

Node : Xml
Eşleme için kök düğüm. Belirtilmezse genel

Order : Array<Expression> : string
Sonuçları sıralamak için kullanılacak ifade.

Type : ( ... | ... | ... )
Sıralama türü (artan veya azalan). Belirtilmezse varsayılan olarak "Ascending" kullanılır.
Sonuçları sıralamak için kullanılan sıralama ifadelerinin dizisi.

Parameters : object
Sorguya aktarılacak ek parametreler.

Start : number
Döndürülecek satırların başlangıç indeksi.

SubQueries : Array<Columns> : ( ... | ... )
Sonuç kümesine dahil edilecek sütunların dizisi.

MaxLength : ( ... | ... )
Döndürülecek en fazla satır sayısı. Ayarlanmazsa tüm satırlar döndürülür.

Name : ( ... | ... )
Alt sorgunun adı. İlişki adı, ad olarak kullanılabilir.

Order : ( ... | ... )
Sonuçları sıralamak için kullanılan sıralama ifadelerinin dizisi.

Parameters : ( ... | ... )
Sorguya aktarılacak ek parametreler.

Relation : ( ... | ... )
Alt sorgu için kullanılacak ilişkinin adı.

Start : ( ... | ... )
Döndürülecek satırlar için başlangıç dizini.

SubQueries : SubQuery[] | undefined
Sonuç kümesine eklenecek alt sorgular dizisi.

TargetSchema : ( ... | ... )
Sorgunun yürütüleceği şemanın adı.

TargetTable : ( ... | ... )
Sorgunun yürütüleceği tablonun adı.

Where : ( ... | ... )
Sorgu sonuçlarını filtreleme ölçütü.

XPath : ( ... | ... )
Verilerin dışa aktarılacağı XPath ifadesi.
Sonuç kümesine dahil edilecek alt sorguların dizisi.

TargetSchema : string
Sorgunun çalıştırılacağı şemanın adı.

TargetTable : string
Sorgunun çalıştırılacağı tablonun adı.

Where : Blocks : Array<...>
İç içe sorgu bloklarından oluşan dizi.

Condition : ( "And" | "Or" )
Bu bloğu sonrakiyle birleştirme koşulu. Belirtilmezse varsayılan değer "And" olur.

Criteria : Array<...>
Bu blokta uygulanacak ölçütlerin dizisi.
Sorgu sonuçlarını filtreleme ölçütü.

XPath : string
Verilerin eşleneceği kök XPath ifadesi):DataTable

Parametreler

Columns : Array<Expression> : ( ... | ... )
Sütun için hesaplama veya dönüştürme olabilecek bir ifade.

Name : ( ... | ... )
Sonuçlarda kullanılacak sütunun adı. Belirtilmezse

XPath : ( ... | ... )
Verileri sütuna eşlemek için bir XPath ifadesi.
Sonuç kümesine dahil edilecek sütunların dizisi.

Map : (this: DataRow, node: Xml) => void
Sonuç kümesindeki her düğüme uygulanacak özel eşleyici işlevi.

MaxLength : number
Döndürülecek en yüksek satır sayısıdır. Belirtilmezse tüm satırlar döndürülür.

Node : Xml
Eşleme için kök düğüm. Belirtilmezse genel

Order : Array<Expression> : string
Sonuçları sıralamak için kullanılacak ifade.

Type : ( ... | ... | ... )
Sıralama türü (artan veya azalan). Belirtilmezse varsayılan olarak "Ascending" kullanılır.
Sonuçları sıralamak için kullanılan sıralama ifadelerinin dizisi.

Parameters : object
Sorguya aktarılacak ek parametreler.

Start : number
Döndürülecek satırların başlangıç indeksi.

SubQueries : Array<Columns> : ( ... | ... )
Sonuç kümesine dahil edilecek sütunların dizisi.

MaxLength : ( ... | ... )
Döndürülecek en fazla satır sayısı. Ayarlanmazsa tüm satırlar döndürülür.

Name : ( ... | ... )
Alt sorgunun adı. İlişki adı, ad olarak kullanılabilir.

Order : ( ... | ... )
Sonuçları sıralamak için kullanılan sıralama ifadelerinin dizisi.

Parameters : ( ... | ... )
Sorguya aktarılacak ek parametreler.

Relation : ( ... | ... )
Alt sorgu için kullanılacak ilişkinin adı.

Start : ( ... | ... )
Döndürülecek satırlar için başlangıç dizini.

SubQueries : SubQuery[] | undefined
Sonuç kümesine eklenecek alt sorgular dizisi.

TargetSchema : ( ... | ... )
Sorgunun yürütüleceği şemanın adı.

TargetTable : ( ... | ... )
Sorgunun yürütüleceği tablonun adı.

Where : ( ... | ... )
Sorgu sonuçlarını filtreleme ölçütü.

XPath : ( ... | ... )
Verilerin dışa aktarılacağı XPath ifadesi.
Sonuç kümesine dahil edilecek alt sorguların dizisi.

TargetSchema : string
Sorgunun çalıştırılacağı şemanın adı.

TargetTable : string
Sorgunun çalıştırılacağı tablonun adı.

Where : Blocks : Array<...>
İç içe sorgu bloklarından oluşan dizi.

Condition : ( "And" | "Or" )
Bu bloğu sonrakiyle birleştirme koşulu. Belirtilmezse varsayılan değer "And" olur.

Criteria : Array<...>
Bu blokta uygulanacak ölçütlerin dizisi.
Sorgu sonuçlarını filtreleme ölçütü.

XPath : string
Verilerin eşleneceği kök XPath ifadesi. query
    İçe aktarma parametrelerini tanımlayan sorgu nesnesi.

Döndürür

İçe aktarılan verileri temsil eden DataTable nesnesi.

Açıklamalar

Bu yöntem, şu yöntemleri sarmalar: DataTable.ImportFromXml ve DataTable.Save .

XML veri modelinizin ve SQL tablo sütunlarınızın tasarımı, kullanım kolaylığı açısından büyük önem taşır. XML düğümü ve tablo sütunu adları aynı olduğunda bu yöntem bunları otomatik olarak eşler.

Eşleme işlevi Veritabanına kaydetmeden önce bir parolayı şifrelemek gibi, değerleri kaydetmeden önce dönüştürmek için bir eşleme işlevi kullanılabilir. Daha fazla bilgi için $Database.ExportToXml bkz.

Örnek

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$Database.ImportFromXml({
    TargetSchema : 'Edoksis',
    TargetTable : 'Accounts',
    XPath : 'Accounts/Account',
    Map : function (xml) {
        var pass = xml.Evaluate('Password');
        // if not marked as encrypted (means user has edited the password field) encrypt it
        if (!pass.startsWith('Enc:'))
            this.Password = $Crypto.Encrypt($EncryptionPassword, this.Id, xml.Evaluate('Password'));
        else // otherwise just remove the mark
            this.Password = pass.substr(4);
    }
});

Veri içe aktarmaya yönelik yaygın kullanım durumu

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Assume this is your XML data
// <Root>
//   <Questions>
//     <Question>
//        <Id>145</Id>
//        <Text>What is your favorite product?</Text>
//     </Question>
//     <Question>
//        <Id>146</Id>
//        <Text>Where did you hear about it?</Text>
//     </Question>
//   </Questions>
// </Root>

$Database.ImportFromXml({
    Parameters : {
        TargetSchema : 'Poll',
        TargetTable : 'Questions'
    },
    XPath : 'Questions/Question'
});

// Each "Question" node gets saved into the "Questions" table,
// mapping the inner XML content to the related columns on the table.

Sütunları Özelleştirerek Güncelleme

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Save organization unit positions
$Database.ImportFromXml({
    Parameters : {
        TargetSchema : "HR",
        TargetTable : "OrganizationUnitPositions"
    },
    XPath : "//OrganizationUnitPositions/OrganizationUnitPosition",
    Map : function (xml) {
        // Update position by parent node id
        this.Position = xml.Evaluate('../../Id');
    }
});

Info

Varsayılan olarak, eşleşen tüm sütunlar ve veri modeli öğeleri ada göre otomatik olarak güncellenir. Tablo sütunlarınızın ve veri modeli adlarınızın farklı olması durumunda, sütunları veri modelinize el ile eşlemek için bir Map işlev sağlayabilirsiniz.

Yalnızca Seçili Sütunları Güncelleme

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
$Database.ImportFromXml({
    Parameters : {
        TargetSchema : 'Poll',
        TargetTable : 'Questions'
    },
    Columns : [
        {Name : 'Id'},
        {Name : 'Content'},
        {Name : 'Number'},
        {Name : 'Type'}
    ],
    XPath : 'Questions/Question',
    Map : function (node) {
        this.Column('MyId', node.Evaluate('Id'));
        this.Column('MyContent', node.Evaluate('Content'));
        this.Column('MyNumber', node.Evaluate('Number'));
        this.Column('MyType', node.Evaluate('Type'));
    }
});

İç İçe Ekleme ve Güncelleme

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$Database.ImportFromXml({                                                                        // Save employee
   Parameters : {
       TargetSchema : 'HR',
       TargetTable : 'Employee'
   },
   XPath : 'Identities/Identity',                                                                // Find rows under Identities/Identity xpath
   ColumnsXPath : 'Employee',                                                                    // Fetch column values from Employee. Final xpath
   Map : function(employeeNode) {

       $Database.Get({                                                                           // Fetch matching records from database
           Parameters : {
               TargetSchema : 'HR',
               TargetTable : 'OrganizationUnitPositionMembers'
           },
           Where : {
             Criteria : [
               { Name : 'Employee', Value : employeeNode.Evaluate('Id') },                       // "Employee must equal to Employee/Id xpath value."
               { Name : 'RegistryNumber', Value : '%2', Comparison : 'Like', Condition : 'Or' }  // Another sample criterion: "or RegistryNumber must end with 2"
             ]
           }
       })
       .DeleteAll()                                                                              // Delete all existing rows
       .CreateNew(function() {                                                                   // Create a new row
           this.Employee = employeeNode.Evaluate('Id');                                          // Set Employee column to "Employee/Id" xpath value.
           this.OrganizationUnitPosition = employeeNode.Evaluate('Employee/Position');           // Set OrganizationUnitPosition column to "Employee/Position" xpath value.
       })
       .Save();                                                                                  // Save the table.
  }
});

Alt Sorgularla Sütun Güncelleme

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// Save corporations with the subcorporations
$Database.ImportFromXml({
    Parameters : {
        TargetSchema : 'Document',
        TargetTable : 'Corporations'
    },
    XPath : 'Corporations/Corporation',
    SubQueries : [
        {Name : 'SubCorporations'}
    ]
});

Form verileriniz olarak aşağıdaki XML'in ve iki SQL tablonuzun bulunduğunu varsayalım:

Corporations ve SubCorporations tablosundan Corporations tablosuna, adı da SubCorporations olan bire çok ilişkisi. SubCorporations .

Warning

Alt sorgularla güncelleme yapabilmek için bu ilişkinin güncelleme kuralını "Cascade" olarak ayarlamayı unutmayın.

SubCorporations verileri de ilgili SQL tablosuna kaydetmenizi sağlar.

Form XML Örneği

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<GeneralDefinitions>
  <Corporations>
     <Corporation>
        <Id>9b7383a3-67ae-4fed-a135-1f981b165c43</Id>
        <Name>Corporation A</Name>
        <ShortName>CorpA</ShortName>
        <SubCorporations>
           <SubCorporation>
              <Id>309069b4-4274-4063-b7ad-75c5657d7474</Id>
              <Name>SubCorporation A 1</Name>
              <ShortName>SubCorpA1</ShortName>
           </SubCorporation>
           <SubCorporation>
              <Id>6ba3cc79-9ff7-4232-8f61-9245a38fd2bb</Id>
              <Name>SubCorporation A 2</Name>
              <ShortName>SubCorpA2</ShortName>
           </SubCorporation>
        </SubCorporations>
     </Corporation>
     <Corporation>
        <Id>5a900112-a869-41cf-931c-7379c1df518e</Id>
        <Name>Corporation B</Name>
        <ShortName>CorpB</ShortName>
        <SubCorporations>
           <SubCorporation>
              <Id>8e7ca6d2-5629-4f87-82ed-73c72cfb171e</Id>
              <Name>SubCorporation B 1</Name>
              <ShortName>SubCorpB1</ShortName>
           </SubCorporation>
           <SubCorporation>
              <Id>7c5f330e-68d8-45f0-800e-04e2f7e035e0</Id>
              <Name>SubCorporation B 2</Name>
              <ShortName>SubCorpB2</ShortName>
           </SubCorporation>
        </SubCorporations>
     </Corporation>
  </Corporations>
</GeneralDefinitions>

Ayrıca bkz.