LOGICALREF - SITEID - ORGLOGICREF alanları arasındaki ilişki nedir?
06/05/15 11:19 Tiger/Logo Object Designer (LOD)
Logo Objects ile Read ettiğim bir kaydı güncellemeye çalıştığımda neden bir başka kaydı güncellemeye çalışır?
uyarlama LogoObjects LOD
Logo Objects, kaydetme sırasında XML altyapısını kullanmaktadır. Dolayısıyla kaydetme (veya güncelleme) sırasında XML tagleri arasındaki DATA_REFERENCE alanındaki referansı baz alarak işlemini gerçekleştirir. Eğer DATA_REFERENCE xml alanında kaydın LOGICALREF'inden farklı bir değer varsa sizin okuduğunuz kaydı değil DATA_REFERENCE xml alanında referans bilgisi yer alan bir başka kaydı güncellemeye çalışacaktır.
XML altyapısı kurgulanırken bir firmadan diğer firmaya kaydın gönderilebileceği, diğer firmada aynı kayıt güncellenip tekrar ilk firmaya gönderileceği senaryosu için "veri merkezi" sistemi kurulmuştur. Bu sistemi bir örnekle açıklayayım;
Örneğin, 1. Firmayı tanımlarken (sistem İşletmeni içerisinde Yönetim \ "Firmalar" ) veri merkezi olarak 101 numaralı veri merkezi olarak işaretlediniz. 2. Firmayı tanımlarken de 202 diye bir veri merkezi tanımladınız. 1. Firmadan bir malzeme kartı kaydettiniz ve bu kartın LG_001_ITEMS tablosundaki LOGICALREF değeri diyelim ki 333 oldu. Aynı tabloda SITEID (veri merkezi) alanı 101 olacaktır. Siz bu malzeme kartını 2 numaralı firmaya XML olarak atmak istediğinizde oluşan XML dosyasında DATA_REFERENCE tagindeki bilgisi 333 olacaktır. DATA_SITEID bilgisi ise 101 olacaktır. 2. Firmada kaydı içeri aldığınızda tabiki LG_002_ITEMS tablosundaki LOGICALREF değeri bu tablodaki son LOGICALREF'ten 1 fazla olacaktır. Bu da diyelim ki 444 oldu. Fakat baktığınızda SITEID alanında 101, ORGLOGICREF alanında ise 333 değerlerinin olduğunu görürsünüz, yani 1. firmanın veri merkezi numarası ve 1. firmadaki Orjinal Logicalref değerleri.
Siz akabinde, bu malzemeyi 2. Firmada güncelleyip 2. firmadan 1. firmaya XML olarak attığınızda XML dosyasında yine DATA_SITEID = 101, DATA_REFERENCE = 333 olarak görürsünüz. 1. Firma, bu XML 'i içeri alırken veri merkezini 101 olarak görür ve "bu kaydın orjinali bende" kararını vererek 333 referanslı kaydını bulup günceller.
Buraya kadar sistem düzgün çalışmaktadır. Sistemi bozacak tek şey veri merkezinin tanımlı olmamasıdır.
Eğer veri merkezi tanımı olmazsa Logo Objects kaydı güncellerken ne yapar?
Veri merkezi olmadığında DATA_SITEID tagi XML de yer almaz ve 0 (sıfır) kabul edilir. Yukarıdaki örnekte veri merkezi tanımı olmadığını düşünelim. Bu durumda tablolardaki SITEID alanları da 0 olacaktır. Siz 2. firmada 444 referanslı kaydı Logo Objects ile READ edersiniz ve gerekli değişiklikleri yapar POST edersiniz. POST esnasında XML altyapısı devreye girer ve DATA_SITEID ve DATA_REFERENCE alanlarını okur. DATA_SITEID = 0 olduğunda ve 2. firmada da veri merkezi tanımı olmadığından, yani o da 0 olduğundan sistem "Bu kayıt aslında benim kaydım" kararını verir ve DATA_REFERENCE alanında yazan 333 ü baz alarak LG_002_ITEMS tablosundaki 333 referanslı kaydı güncellemeye çalışır.
Kısacası sizin sisteminizde muhtemelen veri merkezi kullanılmadan XML ile aktarılmış kayıtlar mevcuttur. Bu kayıtları yakalamak ve düzeltmek kolaydır.
Yine yukarıdaki örneği baz alırsak 2 numaralı firmanın malzeme kartları tablosundaki bu hatalı kayıtlar aşağıdaki sorgu ile yakalanabilir;
FROM LG_002_ITEMS WITH(NOLOCK)
WHERE (ORGLOGICREF <> 0)
AND (SITEID = 0)
AND (ORGLOGICREF <> LOGICALREF)
Hatalı kaydın düzeltilmesi için ORGLOGICREF alanı 0 ile veya kaydın LOGICALREF teki değeri ile "update" edilmesi yeterlidir.
Farklı bir ERP sisteminden XML yapısı kullanılarak kayıtlar LOGO içerisine alınıyorsa ne yapmak gerekir?
XML ile gelen dosyada DATA_SITEID olmadığından, örtüşmesinler diye LOGO tarafında veri merkezi mi set edilmeli?
Yada XML ile gelen dosyaya DATA_SITEID 0(sıfır) dan farklı bir değer mi olmalı acaba?
Veri merkezi sistemi (DATA_SITEID alanlarının doldurulmasını sağlayan sistem) firma tanımının yapıldığı, ilk kurgunun oluşturulduğu an tanımlanması gereken bir yapıdır. Çalışma anında veya o firma üzerinde bir süre çalışıldıktan sonra tanımlanması farklı problemlere yol açabilir. Bu durumda da gelen ve daha sonra gelecek XML verilerinin içerisinde DATA_SITEID olmayacağını öngörebiliriz. Dolayısıyla kurgunuz, bu bozuk kayıtların oluşacağını da kapsamalıdır.
Yapılması gereken, güncelleme işlemi yapılmadan önce bir update sorgusuyla önce bu problemi gidermek(ilgili kayıt için ORGLOGICREF = LOGICALREF eşitliğini sağlamak), akabinde Logo Objects ile işleminize devam etmektir.
SITEID alanı sıfır,GUID alanı benzersiz, ORGLOGICALREF = LOGICALREF koşullarının sağlanmasına rağmen xml içerisinde cari hesapta güncelleme yapmak için INS alanını UPD yaptığımda aktarım yapamıyorum. Duplucate hatası alıyorum. INDEX2 için buda CODE alanına denk gelmektedir.