XML veri modelinizin ve SQL tablo sütunlarınızın tasarımı, kullanım kolaylığı açısından önemlidir. XML düğümü ve tablo sütunu adları aynı olduğunda bu yöntem bunları otomatik olarak eşler.
Eşleme işlevi Bir eşleme işlevi, değerleri kaydetmeden önce dönüştürmek için kullanılabilir; örneğin, veritabanına kaydetmeden önce bir parolayı şifrelemek için. Daha fazla bilgi için bkz. $Database.ExportToXml .
$Database.ImportFromXml({TargetSchema:'Edoksis',TargetTable:'Accounts',XPath:'Accounts/Account',Map:function(xml){varpass=xml.Evaluate('Password');// if not marked as encrypted (means user has edited the password field) encrypt itif(!pass.startsWith('Enc:'))this.Password=$Crypto.Encrypt($EncryptionPassword,this.Id,xml.Evaluate('Password'));else// otherwise just remove the markthis.Password=pass.substr(4);}});
Veri içe aktarmaya yönelik yaygın kullanım durumu¶
1 2 3 4 5 6 7 8 9101112131415161718192021222324
// 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.
// Save organization unit positions$Database.ImportFromXml({Parameters:{TargetSchema:"HR",TargetTable:"OrganizationUnitPositions"},XPath:"//OrganizationUnitPositions/OrganizationUnitPosition",Map:function(xml){// Update position by parent node idthis.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.
$Database.ImportFromXml({// Save employeeParameters:{TargetSchema:'HR',TargetTable:'Employee'},XPath:'Identities/Identity',// Find rows under Identities/Identity xpathColumnsXPath:'Employee',// Fetch column values from Employee. Final xpathMap:function(employeeNode){$Database.Get({// Fetch matching records from databaseParameters:{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 rowthis.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.}});
// 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'nin ve iki SQL tablonuzun bulunduğunu varsayalım:¶
Corporations ve SubCorporations tablosundan Corporations tablosuna, ayrıca adı da SubCorporations olan bire çok ilişkisi. SubCorporations .
Warning
Alt sorgularla güncelleme yapmak için bu ilişkinin güncelleme kuralını "Cascade" olarak ayarlamayı unutmayın.
Tablo sütunlarının adları XML alanlarıyla aynıysa bu kod, XML verilerindeki her şirketi SQL tablosuna ve ilişkili öğelerini de¶
SubCorporations ilişkili SQL tablosuna kaydetmenizi sağlar.