Dış Kural Kümesi Araç Seti
Normalde kurallar bir iş akışı uygulamasında kullanıldığında, kurallar derlemenin bir parçasıdır. Bazı senaryolarda RuleSets'i derlemeden ayrı tutmak isteyebilirsiniz, böylece iş akışı derlemesini yeniden oluşturmadan ve dağıtmadan güncelleştirilebilirler. Bu örnek, veritabanındaki RuleSet'leri yönetmenize ve düzenlemenize ve bu RuleSet'lere çalışma zamanında bir iş akışından erişmenize olanak tanır. Bu, iş akışı örneklerinin çalıştırılmasının RuleSet değişikliklerini otomatik olarak birleştirmesini sağlar.
Dış RuleSet Araç Seti örneği, veritabanındaki RuleSet sürümlerini yönetmek ve düzenlemek için kullanabileceğiniz Windows Forms tabanlı bir araç içerir. Ayrıca, bu kuralları yürütmek için bir etkinlik ve bir konak hizmeti içerir.
Not
Bu örnek Için Microsoft SQL Server gerekir.
Visual Studio, Windows Workflow Foundation'ın (WF) bir parçası olarak bir RuleSet düzenleyicisi sağlar. Bir iş akışındaki etkinliğe çift tıklayarak bu düzenleyiciyi Policy
başlatabilirsiniz; tanımlanan RuleSet nesnesini iş akışıyla ilişkilendirilmiş .rules dosyasına seri hale getirmektedir (etkinlik Policy
, iş akışına karşı bir RuleSet örneği çalıştırır). .rules dosyası, iş akışı projesini oluştururken derlemeye kaynak olarak derlenmiş.
Bu örneğin bileşenleri şunlardır:
Veritabanındaki RuleSet sürümlerini düzenlemek ve yönetmek için kullanabileceğiniz bir RuleSet grafik kullanıcı arabirimi aracı.
Konak uygulamasında yapılandırılan ve veritabanından RuleSets'e erişen bir RuleSet hizmeti.
ExternalPolicy
RuleSet hizmetinden RuleSet isteyen ve ruleset'i iş akışında çalıştıran bir etkinlik.
Bileşenlerin etkileşimi aşağıdaki görüntüde gösterilmiştir. İzleyen bölümler her bileşeni açıklar.
RuleSet Aracı
Aşağıdaki görüntüde RuleSet aracının ekran görüntüsü yer alır. Kural Deposu menüsünden, kullanılabilir RuleSet'leri veritabanından yükleyebilir ve değiştirilen RuleSet'leri depoya geri kaydedebilirsiniz. Uygulama yapılandırma dosyası RuleSet veritabanı için bir veritabanı bağlantı dizesi sağlar. Aracı başlattığınızda, yapılandırılan veritabanından RuleSets otomatik olarak yüklenir.
RuleSet aracı, RuleSets'e ana ve ikincil sürüm numaraları uygulayarak birden çok sürümü aynı anda korumanıza ve depolamanıza olanak tanır (araç, sürüm oluşturma özelliğine ek olarak kilitleme veya diğer yapılandırma yönetimi özellikleri sağlamaz). Aracı kullanarak yeni RuleSet sürümleri oluşturabilir veya mevcut sürümleri silebilirsiniz. Yeni'ye tıkladığınızda, araç yeni bir RuleSet adı oluşturur ve sürüm 1.0'ı uygular. Bir sürümü kopyaladığınızda, araç kapsanan kurallar dahil olmak üzere seçili RuleSet sürümünün bir kopyasını oluşturur ve yeni, benzersiz sürüm numaraları atar. Bu sürüm numaraları, mevcut RuleSet'lerin sürüm numaralarını temel alır. Formdaki ilişkili alanları kullanarak RuleSet adını ve sürüm numaralarını değiştirebilirsiniz.
Kuralları Düzenle'ye tıkladığınızda, aşağıdaki görüntüde gösterildiği gibi RuleSet düzenleyicisi başlatılır:
Bu, Windows Workflow Foundation Visual Studio eklentisinin parçası olan düzenleyici iletişim kutusunun yeniden barındırılıyor olmasıdır. Intellisense desteği de dahil olmak üzere aynı işlevselliği sağlar. Kurallar, araçtaki RuleSet ile ilişkili bir hedef türüne (iş akışı gibi) göre yazılır; Ana araç iletişim kutusunda Gözat'a tıkladığınızda, Şekil 4'te gösterildiği gibi İş Akışı/Tür Seçici iletişim kutusu görüntülenir.
Şekil 4: İş Akışı/Tür Seçici
Bir derlemeyi ve bu derleme içinde belirli bir türü belirtmek için İş Akışı/Tür Seçici iletişim kutusunu kullanabilirsiniz. Bu tür, kuralların yazıldığı (ve çalıştırıldığı) hedef türüdür. Çoğu durumda hedef tür bir iş akışı veya başka bir etkinlik türüdür. Ancak, herhangi bir .NET türünde ruleset çalıştırabilirsiniz.
Derleme dosyasının yolu ve veritabanındaki RuleSet türü name are stored with the
, böylece RuleSet veritabanından alındığında araç hedef türü otomatik olarak yüklemeyi dener.
İş Akışı/Tür Seçici iletişim kutusunda Tamam'a tıkladığınızda, hedef türün kurallar tarafından başvurulan tüm üyeleri içerdiğinden emin olmak için seçili türü RuleSet'e göre doğrular. Hatalar, Doğrulama Hataları iletişim kutusunda gösterilir. Hatalara rağmen değişikliğe devam etmeyi seçebilir veya İptal'e tıklayabilirsiniz. Ana araç iletişim kutusundaki Araçlar menüsünde Doğrula'ya tıklayarak RuleSet sürümünü hedef etkinliğe karşı yeniden doğrulayabilirsiniz.
Araçtaki Veri menüsünden RuleSets'i içeri ve dışarı aktarabilirsiniz. İçeri Aktar'a tıkladığınızda, içinden bir .rules dosyası seçebileceğiniz bir dosya seçici iletişim kutusu görüntülenir. Bu, başlangıçta Visual Studio'da oluşturulmuş bir dosya olabilir veya olmayabilir. .rules dosyası, bir koşul koleksiyonu ve RuleSets koleksiyonu içeren serileştirilmiş RuleDefinitions
bir örnek içermelidir. Araç koşul koleksiyonunu kullanmaz, ancak Visual Studio ortamıyla etkileşime izin vermek için .rules biçimini kullanır RuleDefinitions
.
Bir .rules dosyası seçtikten sonra bir RuleSet Seçici iletişim kutusu görüntülenir. İçeri aktarmak istediğiniz dosyadan RuleSets'i seçmek için iletişim kutusunu kullanabilirsiniz (varsayılan ayar tüm RuleSet'leri belirtir). .rules dosyasındaki RuleSet'lerin sürüm numaraları yoktur, çünkü bir WF projesindeki sürümleri derlemenin sürümüyle aynıdır. İçeri aktarma işlemi sırasında araç otomatik olarak bir sonraki kullanılabilir ana sürüm numarasını atar (içeri aktarma işleminden sonra değiştirebilirsiniz); Atanan sürüm numaralarını RuleSet Seçici listesinde görebilirsiniz.
İçeri aktardığı her RuleSet için araç, RuleSet'te kullanılan üyelere göre .rules dosyasının (varsa) konumu altındaki bin\Debug klasöründen ilişkili türü bulmaya çalışır. Araç birden çok eşleşen tür bulursa, .rules dosya adı ile tür adı arasındaki eşleşmeyi temel alan bir tür seçmeye çalışır (örneğin, Workflow1
tür Workflow1.rules'a karşılık gelir). Birden çok eşleşme varsa, türü seçmeniz istenir. Bu otomatik tanımlama mekanizması eşleşen bir derlemeyi veya türü bulamazsa, içeri aktardıktan sonra ilişkili türe gitmek için ana araç iletişim kutusunda Gözat'a tıklayabilirsiniz. Aşağıdaki görüntüde RuleSet Seçicisi gösterilmektedir:
Ana araç menüsünden Veri Dışarı Aktar'a tıkladığınızda RuleSet Seçici iletişim kutusu yeniden görüntülenir ve bu iletişim kutusundan dışarı aktarılacak veritabanından RuleSet'leri belirleyebilirsiniz. Tamam'a tıkladığınızda, sonuçta elde edilen .rules dosyasının adını ve konumunu belirtebileceğiniz bir Dosyayı Kaydet iletişim kutusu görüntülenir. .rules dosyası sürüm bilgileri içermediğinden, belirli bir RuleSet adına sahip yalnızca bir RuleSet sürümü seçebilirsiniz.
PolicyFromService Etkinliği
Etkinliğin PolicyFromService
kodu basittir. WF ile sağlanan etkinliğe Policy
çok benzer şekilde çalışır, ancak hedef RuleSet'i .rules dosyasından almak yerine RuleSet örneğini almak için bir konak hizmeti çağırır. Ardından RuleSet'i kök iş akışı etkinlik örneğinde çalıştırır.
Etkinliği bir iş akışında kullanmak için PolicyActivities
iş akışı projenizdeki ve RuleSetService
derlemelerine bir başvuru ekleyin. Etkinliğin araç kutusuna nasıl ekleneceğine ilişkin bir tartışma için bu konunun sonundaki yordama bakın.
Etkinliği iş akışınıza yerleştirdikten sonra, çalıştırılacak RuleSet'in adını sağlamanız gerekir. Adı değişmez değer olarak girebilir veya başka bir etkinliğin iş akışı değişkenine veya özelliğine bağlayabilirsiniz. İsteğe bağlı olarak, çalıştırılması gereken belirli RuleSet için sürüm numaraları girebilirsiniz. Ana ve ikincil sürüm numaraları için varsayılan 0 değerini bırakırsanız, etkinlik için veritabanındaki en son sürüm numarası otomatik olarak sağlanır.
RuleSet Hizmeti
Hizmet, belirtilen RuleSet sürümünü veritabanından almaktan ve çağırma etkinliğine döndürmekten sorumludur. Daha önce açıklandığı gibi, çağrıda geçirilen ana ve ikincil sürüm değerlerinin GetRuleSet
ikisi de 0 ise, hizmet en son sürümü alır. Bu noktada RuleSet tanımları veya örnekleri önbelleğe alınmaz; benzer şekilde, RuleSet sürümlerini devam eden RuleSet'lerden ayırmak için "dağıtıldı" olarak işaretlemeye yönelik hiçbir özellik yoktur.
Hizmet tarafından erişilecek veritabanı bir uygulama yapılandırma dosyası kullanılarak konakta yapılandırılmalıdır.
Aracı çalıştırmak için
Araç ve hizmet tarafından kullanılan RuleSet tablosunu ayarlayan klasör bir Setup.sql dosyası içerir. SQL Express'te Kurallar veritabanını oluşturmak ve RuleSet tablosunu ayarlamak için Setup.cmd toplu iş dosyasını çalıştırabilirsiniz.
Toplu iş dosyasını veya Setup.sql düzenler ve SQL Express kullanmamanızı veya tabloyu dışında
Rules
bir adla adlandırılan bir veritabanına yerleştirmemenizi belirtirseniz, RuleSet aracındaki veUsageSample
projelerdeki uygulama yapılandırma dosyaları aynı bilgilerle düzenlenmelidir.Setup.sql betiğini çalıştırdıktan sonra çözümü derleyebilir
ExternalRuleSetToolkit
ve ardından ExternalRuleSetTool projesinden RuleSet aracını başlatabilirsiniz.RuleSetToolkitUsageSample
Sıralı İş Akışı Konsolu Uygulaması çözümü örnek bir iş akışı içerir. İş akışı, hedef RuleSet'in çalıştığı birPolicyFromService
etkinlik vediscount
iki değişkendenorderValue
oluşur.Örneği kullanmak için çözümü oluşturun
RuleSetToolkitUsageSample
. Ardından RuleSet aracı ana menüsünden Veri İçeri Aktar'a tıklayın ve RuleSetToolkitUsageSample klasöründeki DiscountRuleSet.rules dosyasının üzerine gelin. İçeri aktarılan RuleSet'i veritabanına kaydetmek için Kural Deposu-Kaydet menü seçeneğine tıklayın.Derlemeye
PolicyActivities
örnek iş akışı projesinden başvurulacağından,PolicyFromService
etkinlik iş akışında görünür. Ancak araç kutusunda varsayılan olarak görünmez. Araç kutusuna eklemek için aşağıdakileri yapın:Araç kutusuna sağ tıklayın ve Öğeleri Seç'i seçin (bu işlem biraz zaman alabilir).
Araç Kutusu Öğelerini Seç iletişim kutusu görüntülendiğinde Etkinlikler sekmesine tıklayın.
Çözümdeki
PolicyActivities
derlemeye göz atın ve Aç'aExternalRuleSetToolkit
tıklayın.PolicyFromService
Araç Kutusu Öğeleri Seç iletişim kutusunda etkinliğin seçili olduğundan emin olun ve tamam'a tıklayın.Etkinlik artık RuleSetToolkitUsageSample Bileşenleri kategorisindeki araç kutusunda görünmelidir.
RuleSet hizmeti, Program.cs'de aşağıdaki deyimi kullanılarak konsol uygulaması konasında zaten yapılandırılmıştır.
workflowRuntime.AddService(new RuleSetService());
Ayrıca bir yapılandırma dosyası kullanarak ana bilgisayarda hizmeti yapılandırabilirsiniz; Ayrıntılar için SDK belgelerine bakın.
İş akışı projesine, hizmet tarafından kullanılacak veritabanının bağlantı dizesi belirtmek üzere bir uygulama yapılandırma dosyası eklenir. Bu, RuleSet tablosunu içeren veritabanına işaret eden RuleSet aracı tarafından kullanılan bağlantı dizesi aynı olmalıdır.
Artık projeyi diğer iş akışı konsol uygulamaları gibi çalıştırabilirsiniz
RuleSetToolkitUsageSample
. Visual Studio'da F5 veya Ctrl+F5 tuşlarına basın veya RuleSetToolkitUsageSample.exe dosyasını doğrudan çalıştırın.Not
Kullanım örneğini yeniden derlemek için RuleSet aracını kapatmanız gerekir çünkü araç kullanım örneği derlemesini yükler.