Tag: Schema

Biztalk Error : “Cannot locate document specification because multiple schemas matched the message type” ve Çözümü

Haziran 2nd, 2010

Biztalk Server schemaları root node name + namespace mantığıyla ayırt eder. Eğer İlk node un ismi ve namespace in birleşimi aynı olan birden fazla şemanız mevcutsa bu hatayı alırsınız. Yani Biztalk bu yapıya sahip bir mesaj aldığında hangi şemayı kullanacağını bilemez/karar veremez.

üç tane çözümü mevcuttur (benim bildiğim :))

  1. Aynı yapıya sahip iki şema zaten olmamalıysa, yani yanlışlıkla olmuşsa, gereksiz şemayı silip yeniden deploy edersiniz.
  2. Yanlışlık yoksa ve şemanın ikisini de kullanmanız gerekli ise;
    1. Source mesajın şemasını değiştirebiliyorsanız, yani xml dosyasını üreten programda değişiklik yapabilirseniz, programdan xmlns yi veya root node un ismini değiştirmeniz yeterli olacaktır.c# ile XMLDocument içindeki namespace i (xmlns) aşağıdaki gibi değiştirebilirsiniz;

      XmlDocument xmlDocument = new XmlDocument();
      xmlDocument.Load(“dosyaadi veya var olan XmlDocument kullanılabilir”);
      XmlAttribute attributeNode = xmlDocument.CreateAttribute(“xmlns”, “”, “http://blablabla”);
      xmlDocument.DocumentElement.SetAttributeNode(attri buteNode);

    2. Yukarıdaki çözüm işinize yaramazsa ki kaynak üreten program elinizde değil ise yaramaz. O zaman Biztalk tarafında aşağıdaki özelliklere sahip bir Pipeline üretiyoruz. Daha sonra Receive Location’ınımız pipelinını, yeni yaptığımız pipeline ile değiştiriyoruz. Böylece Biztalk Server, yaratılan pipeline sayesinde hangi schemanın kullanılacağına karar verebilir.Yeni yaptığımız pipeline a bir adet XML Disassembler eklenir.XML Disassembler ın Allow unrecognized messages özelliği true yapılır. Document schemas dan kullanılmak istenilen schema seçilir.

    3. Daha sonra proje deploy edilir ve kullanılacak olan receive locationdan Receive Pipeline olarak yeni yarattığımız pipeline seçilir.

      Test ettiğinizde problemin çözülmüş olduğunu görürsünüz.

Tags: , , , , , , , , , , , , , , , , , ,
Posted in BizTalk | No Comments »

How to Create Flat File Schema in Biztalk

Temmuz 12th, 2009

This article shows; How to create a flat file schema in Biztalk Server 2009,
My txt file’s content is like that;

07.07.2009—11:06:56— TURKIYE — KOCAELI— GEBZE— 123123 — 100 — KG

For now, one line will be enough,

  1. First of all, Open Visual Studio, and Create a BTS Project
  2. Right Click -> Add -> New Item
  3. flat1

  4. Select Flat File Schema Wizard and click Add
  5. Flat2

  6. Click on Next
  7. flat3

  8. Click on Browse,
  9. flat4

  10. Select Directory, Select File and Click on Open
  11. flat5

  12. Type Record Name, Type Target namespace, select Code page (if you haven’t got any idea, let them as default) and click on Next
  13. flat6

  14. Select the line and Click on Next,
  15. flat7

  16. For this flat file types click By delimiter symbol, if file has relative positions (means; position of node never changes) check relative positions. Then click on Next
  17. flat8

  18. Type Child delimiter. in this file example, i use “—” as delimiter. Click on Next
  19. flat9

  20. Type element names, select Data Types and Click on Next
  21. flat10

  22. Now, on Biztalk Flat File Schema Wizard screen, you can see Schema View. Click on finish.
  23. flat11

  24. Your schema is ready 🙂
  25. flat12

Tags: , , , ,
Posted in BizTalk | No Comments »

XSD Şemasından .NeT Classı Üretmek

Ekim 1st, 2008

Evet başlık doğru 🙂 Elinizde bulunan herhangi bir XSD şemasını kullanarak otomatik olarak .net sınıfı oluşturabilirsiniz.

Hatta bu yöntemle, sınıf tasarımlarınızı XML ile kolayca hazırlayabilirsiniz.

Aşağıda basit bir xml dosyası görebilirsiniz.

Kisi.XML

Şekildeki gibi basit bir XML dosyası hazırladıktan sonra, BizTalk 2006 da bulunan Schema Generatoru kullanarak XML dosyamızı otomatik olarak XSD schemasına dönüştürebiliriz. Tüm bunlarla uğraşmak istemiyorsanız ise XML veya generatoru kullanmadan, Boş bir XSD dosyası açarak istediğiniz schemayı manuel olarak oluşturabilirsiniz.

XML dosyasından XSD yi nasıl oluşturacağımıza gelince,

Aşağıdakinin aynısı yapılır,

1

Yukarıdaki yapıldıktan sonra ise aşağıdakinin aynısı yapılır,

2

Yukarıdaki yapıldıktan sonra ise aşağıdakinin aynısı yapılır,

3

Yukarıdaki yapıldıktan sonra ise aşağıdakinin aynısı yapılır,

4

Tüm işlemler yapıldıktan sonra üstteki gibi bir schema dosyamız oluşturulmul olacaktır. Daha sonra ise oluşturduğumuz bu XSD dosyasını kolaylık olması için C:\ dizinine kopyalayalım. Bu işlem command prompta yazılan komutun kısa ve kolay olmasını sağlayacaktır 🙂

Sonra “Visual Studio Command Prompt” çalıştırılır ve aşağıdaki komut yazılır.

XSD c:\kisiler.xsd /c /out:c:\

Bu komut işletildikten sonra “c:\kisiler.cs” aşağıdaki içerikle beraber oluşturulmuş olacaktır.

Kisiler.cs içeriği:

//——————————————————————————
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.42
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//——————————————————————————

using System.Xml.Serialization;

//
// This source code was auto-generated by xsd, Version=2.0.50727.42.
//

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “2.0.50727.42”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“code”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace=””, IsNullable=false)]
public partial class Kisiler {

private KisilerKisi kisiField;

/// <remarks/>
public KisilerKisi Kisi {
get {
return this.kisiField;
}
set {
this.kisiField = value;
}
}
}

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”, “2.0.50727.42”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“code”)]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
public partial class KisilerKisi {

private string adField;

private string soyadField;

/// <remarks/>
public string Ad {
get {
return this.adField;
}
set {
this.adField = value;
}
}

/// <remarks/>
public string Soyad {
get {
return this.soyadField;
}
set {
this.soyadField = value;
}
}
}

Kisiler.XSD içeriği :

<?xml version=”1.0″ encoding=”utf-16″?>
<xs:schema attributeFormDefault=”unqualified” elementFormDefault=”qualified” xmlns:xs=”http://www.w3.org/2001/XMLSchema”>
<xs:element name=”Kisiler”>
<xs:complexType>
<xs:sequence>
<xs:element name=”Kisi”>
<xs:complexType>
<xs:sequence>
<xs:element name=”Ad” type=”xs:string” />
<xs:element name=”Soyad” type=”xs:string” />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

Görüldüğü gibi tüm sınıf içeriği çok basit bir şekilde otomatik olarak oluşturuldu. Bunu daha kompleks XML dosyaları veya XSD schemaları içinde yapabiliriz. Otomatik olarak oluşturulacak sınıfımız ona göre karmaşık olacaktır.

Gelen Aramalar:

  • xsd c# class

Tags: , , , ,
Posted in .NeT 2008, BizTalk | 2 Comments »