Açıklama:


Süreçlere ait iş adımları tamamlandıkça bunlara ait veriler çeşitli şekillerde basex ve SQL'e yazılmaktadır. Bazı durumlarda bu verilerin SQL'e yazılıp da Basex'e yazılmaması durumuyla karşılaşılabilir, sorunun tespiti için aşağıdaki sorguları sırasıyla Basex GUI ve SQL Management Studio'da çalıştırınız:

  

for $x in //form
return '''' || $x/@Id || ''','

    

SELECT DISTINCT f.Id FROM wFormData f JOIN wWorkItems w ON f.Id=w.DataId
  JOIN wInstances i ON w.InstanceId=i.Id
  JOIN wVersions v ON v.Id = i.ProcessVersionId
  JOIN wProcesses p ON v.ProcessId = p.Id
  WHERE p.Id = '2CE321D9-113E-4E45-B3E5-1D3CAD660428'
  AND i.State <> 0  

      

Bu sorgular size basex ve SQL veritabanındaki kayıt sayısını dönecektir. Eğer sayılar birbirini tutmuyorsa, bu sorunla karşı karşıyasınız demektir. Aşağıdaki çözüme başvurabilirsiniz.


Çözüm:


Versiyon 4 öncesi:


Öncelikle 6Kare Agent servisini durduruyoruz, sonra ister tüm süreçler isterseniz de seçeceğiniz süreçler için WorkItems tablosundan DataId alanlarını çekip aşağıdaki sorgunun where cümlesindeki noktalı yere yazıyoruz. Buradaki "State = 4" parametresi hata almış işlemleri belirtmektedir.

UPDATE wFormData SET State=2 
WHERE State=4 AND Id IN (...)

Sorguyu koşturduktan sonra Agent servisini tekrar başlatıyoruz ve SQL'deki form verisi tekrardan basex'e yazılıyor.



Versiyon 4 sonrası:


wFormData tablosundaki state kolonu kaldırıldığı için bundan sonraki versiyonlarda aşağıdaki şekilde form verisini SQL'den Basex'e çektirebilirsiniz:

Bu versiyonda gelen wXmlDatabaseRegistry tablosunda, basexe yazılan form verilerinin kaydı tutulmaktadır. Aşağıdaki sorgu belirli bir sürecin tüm versiyonları için, belirli bir tarihten sonra başlatılan instance'ların form verilerinin basexe yazılma kayıtlarını getirir. Yazılmış olan form verisinde bir sorun olduğunu düşünüyorsanız ilgili kayıtları bu tablodan silerek tekrar çekilmelerini sağlayabilirsiniz.  

SELECT TOP 1000 * FROM [ALTIKARE].[dbo].[wXmlDatabaseRegistry] WHERE  ItemId IN (
SELECT DataId FROM wWorkItems WHERE InstanceId IN (
SELECT Id FROM wInstances WHERE [start] > '2016-06-01 05:48:17.6885990 +02:00' AND
   ProcessVersionId IN (
SELECT Id FROM wVersions WHERE ProcessID = '07fce917-f464-4fa0-a820-4b634eeb4534')))

   


Sorgularda geçen State alanının alabildiği değerler hakkında daha fazla bilgi almak için: Veritabanı State (Durum) Sütunu