Delphi'de UBL oluşturmak

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
mkysoft
Kıdemli Üye
Mesajlar: 2850
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Delphi'de UBL oluşturmak

Mesaj gönderen mkysoft » 18 Oca 2016 03:25

Arkadaşlar aşağıdaki kodlar ile Delphi 7 ve üzerinde UBL oluşturabilirsiniz. Belki daha eski versiyonlarda da çalışır. İşin püf noktası tasklak bir xml ile başlamak. Taslak ile başlayınca unicode desteği olmayan D7'de bile Türkçe karakter sorunu yaşamayacaksınız. Nasıl yönetiyor incelemedim ancak otomatik çeviriyor sanırım.

unit'in uses kısmına XMLDoc ve XMLIntf ekleyin.

Hata yapmamak için unit'in var kısmından sonra sabitleri ekleyin:

Kod: Tümünü seç

const
  PR_cbc = 'cbc';
  NS_cbc = 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2';
  PR_cac = 'cac';
  NS_cac = 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2';
Mevcut elemanları güncellemek için procedure:

Kod: Tümünü seç

procedure ChangeNode(parent : IXMLNode; name: String; namespace: String; value: String);
var
   node : IXMLNode;
begin
  node := parent.ChildNodes.FindNode(name, namespace);
  if node = nil then
    exit;
  if value = '' then
  begin
    parent.ChildNodes.Remove(node);
    exit;
  end;
  node.Text := value;
end;
XML dosyasını işleyen bir düğmenin tıklama olayı:

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  doc : IXMLDocument;
  parent : IXMLNode;

  faturatipi : IXMLNode;
  musteri : IXMLNode;

  node : IXMLNode;
  new : IXMLNode;

  Uid: TGuid;
  ETTN: String;
begin
  doc := LoadXMLDocument('base.xml');

  parent := doc.DocumentElement;

  //ETTN
  CreateGuid(Uid);
  ETTN := GuidToString(Uid);
  ETTN := StringReplace(ETTN, '{', '', [rfReplaceAll]);
  ETTN := StringReplace(ETTN, '}', '', [rfReplaceAll]);
  ChangeNode(parent, 'UUID', NS_cbc, ETTN);
  //fatura no
  ChangeNode(parent, 'ID', NS_cbc, 'ISS2016000000001');

  //fatura tipi
  faturatipi := parent.ChildNodes.FindNode('InvoiceTypeCode', NS_cbc);
  faturatipi.Text = 'SATIS';

  //müşteri
  musteri := parent.ChildNodes.FindNode('AccountingSupplierParty', NS_cac);

  //Fatura notu ekle
  new := doc.CreateElement(PR_cbc + ':Note', NS_cbc);
  new.Text := 'Fatura notu';
  new.Attributes['languageID'] := 'tr-TR';
  parent.ChildNodes.Insert(parent.ChildNodes.IndexOf(faturatipi) + 1 , new);

  //Dosyaya kaydet
  doc.SaveToFile('sample.xml');
end;
Bu kadar.

Ek: Delphi 7 ile SOAP web servis kullanmak için: http://cc.embarcadero.com/Item/24535
Dosya ekleri
UblParser.rar
Delphi 7 örnek uygulama.
(4.81 KiB) 84 kere indirildi
En son mkysoft tarafından 29 Oca 2016 10:24 tarihinde düzenlendi, toplamda 1 kere düzenlendi.

Kullanıcı avatarı
fedora
Üye
Mesajlar: 12
Kayıt: 22 Oca 2016 06:46

Re: Delphi'de UBL oluşturmak

Mesaj gönderen fedora » 28 Oca 2016 04:30

Kod: Tümünü seç

//fatura tipi
  faturatipi := parent.ChildNodes.FindNode('InvoiceTypeCode', NS_cbc);
  faturatipi.Text = 'SATIS';
burada hata var
gidermek için ;

Kod: Tümünü seç

//fatura tipi
  faturatipi := parent.ChildNodes.FindNode('InvoiceTypeCode', NS_cbc);
  faturatipi.Text := 'SATIS';
fakat yinede çekemedim zaten xml yerine html üzerinden çekmeyi gösterebilirseniz güzel olur

mkysoft
Kıdemli Üye
Mesajlar: 2850
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Delphi'de UBL oluşturmak

Mesaj gönderen mkysoft » 29 Oca 2016 10:23

html özel bir xml formatıdır. Namespace kavramı olmadığı için NS_ ile başlayan değişkenlere ihtiyacınız olmayacak.

Kullanıcı avatarı
kimimben
Üye
Mesajlar: 129
Kayıt: 28 Oca 2016 04:41
Konum: İstanbul

Re: Delphi'de UBL oluşturmak

Mesaj gönderen kimimben » 06 Şub 2016 12:42

@mkysoft Hocam
Henüz bir test yapmadım ama,alternatif olarak aşağıda ki kütüphanelerde kullanılabilir sanki.

http://alex.ciobanu.org/?p=285
https://github.com/pavkam/DeHL/blob/mas ... on.XML.pas

mkysoft
Kıdemli Üye
Mesajlar: 2850
Kayıt: 25 Ağu 2003 11:35
Konum: İstanbul
İletişim:

Re: Delphi'de UBL oluşturmak

Mesaj gönderen mkysoft » 08 Şub 2016 02:54

Tabiki olur, girişte belirtmiştim Delphi 7 diye.

Cevapla