Kod kullanarak verilerle ilgili görevler gerçekleştirme
Pek çok veri ile ilgili tasarım görevini gerçekleştirmek için Visual Studio LightSwitch 'deki tasarımcıları ve araç pencerelerini kullanabilirsiniz.Ancak, belirli görevler, yalnızca uygulamaya kod eklenerek gerçekleştirilebilir.Örneğin,özel koşullar uygulayarak bir alanı doğrulamak için kod yazmanız gerekir.Bu belge, veri çalışma zamanı nesne modelini kullanarak verilerle ilgili görevlerin nasıl gerçekleştirileceğini gösterir.Bir uygulamada nerelere kod yazabileceğinize ilişkin daha fazla bilgi için, aşağıdaki konulardan herhangi birine bakın:
Kodun nasıl yazıldığı Visual Studio LightSwitchhakkında genel kılavuz için, bkz. LightSwitch içindeki kod yazma.
Ortak Görevler
Aşağıdaki listede, veri çalıştırma süresi nesne modelini kullanarak gerçekleştirebildiğiniz bazı ortak verilerle ilgili görevler görülmektedir.Görevler, bu belgede daha sonra açıklanmaktadır.
Verilerin Okunması
Verileri Güncelleştirme
Verileri Silme
Veri Ekleme
Verileri Kaydetme
Verileri Onaylama
Verilerin İzinlerinin Ayarlanması
Değişiklik Kümeleriyle Çalışma
Sorguları Genişletme
Verilerin Okunması
Uygulamanızdaki herhangi bir veri kaynağından bireysel veri öğe veya koleksiyonları okuyabilirsiniz.
Aşağıdaki örnek, ekranda şu an seçili olan müşteriyi geri alır.
Private Sub RetrieveCustomer_Execute()
Dim cust As Customer = Me.Customers.SelectedItem
If cust.ContactName = "Bob" Then
'Perform some task on the customer entity.
End If
End Sub
partial void RetrieveCustomer_Execute()
{
Customer cust = this.Customers.SelectedItem;
if (cust.ContactName == "Bob")
{
//Perform some task on the customer entity.
}
}
Aşağıdaki örnek, müşteriler topluluğu üzerinde sırayla dolaşır.
Private Sub RetrieveCustomers_Execute()
For Each cust As Customer In Me.DataWorkspace.NorthwindData.Customers
If cust.ContactName = "Bob" Then
'Perform some task on the customer entity.
End If
Next
End Sub
partial void RetrieveCustomers_Execute()
{
foreach (Customer cust in this.DataWorkspace.NorthwindData.Customers)
{
if (cust.ContactName == "Bob")
{
//Perform some task on the customer entity.
}
}
}
Gezinme Veri İlişkileri
İlgili varlıklardan veri okuyabilirsiniz.Örneğin, bir müşteri, Siparişler varlığı ile bire çok ilişkiye sahip olabilir.Müşteri varlığına ait Siparişler özelliğini kullanarak müşteri tarafından verilen tüm siparişleri sırayla inceleyebilirsiniz.
Aşağıdaki örnek, bir müşteriyle ilgili siparişler topluluğu üzerinde sırayla dolaşır.
Private Sub RetrieveSalesOrders_Execute()
Dim cust As Customer = Me.Customers.SelectedItem
For Each myOrder As Order In cust.Orders
If myOrder.OrderDate = Today Then
'Perform some task on the order entity.
End If
Next
End Sub
partial void RetrieveSalesOrders_Execute()
{
Customer cust = this.Customers.SelectedItem;
foreach (Order order in cust.Orders)
{
if (order.OrderDate == DateTime.Today)
{
//perform some task on the order entity.
}
}
}
Aşağıdaki örnek, belirli bir siparişi veren müşteriyi alır.
Private Sub RetrieveCustomer_Execute()
Dim order As Order
order = Me.DataWorkspace.NorthwindData.Orders_Single _
(Orders.SelectedItem.OrderID)
Dim cust As Customer
cust = order.Customer
'Perform some task on the order entity.
End Sub
partial void RetrieveCustomer_Execute()
{
Order order = this.DataWorkspace.NorthwindData.Orders_Single
(Orders.SelectedItem.OrderID);
Customer cust = order.Customer;
//Perform some task on the customer entity.
}
Sorgu Çalıştırarak Verilerin Okunması
Modelden sorguları geri alabilir ve sonra bunları kodunuzda uygulayabilirsiniz.Örneği görüntülemek için, bkz.: Nasıl yapılır: Veri Al bir sorgudan kodunu kullanarak.
Verileri Güncelleştirme
Kod kullanarak bir varlığa ait verileri güncelleyebilirsiniz.Aşağıdaki örnek, bir kullanıcı Sipariş varlığında sipariş oluşturduğunda çalışan kodu gösterir ve sonra Kaydet düğmesine tıklar.Kod, Sipariş Ayrıntıları varlığındaki alanı kullanarak ürün varlığı alanını güncelleştirir.
Private Sub Orders_Inserting(entity As Order)
For Each detail In entity.Order_Details
detail.Product.UnitsInStock =
detail.Product.UnitsInStock - detail.Quantity
Next
End Sub
partial void Orders_Inserting(Order entity)
{
foreach (Order_Detail detail in entity.Order_Details)
{
detail.Product.UnitsInStock =
(short?)(detail.Product.UnitsInStock - detail.Quantity);
}
}
[!NOT]
Kodunuzun verileri diğer veri kaynaklarından değiştirmesi durumunda, o veri kaynağına ait SaveChanges yöntemini çağırarak bu değişiklikleri uygulayabilirsiniz.Daha fazla bilgi için bkz. How to: Save Data.
Verileri Silme
Herhangi bir varlığa ait Delete yöntemini çağırarak verileri silebilirsiniz.Aşağıdaki örnek, NorthwindData veri kaynağından bir müşteriyi siler.
Private Sub DeleteCustomer_Execute()
Dim cust As Customer
cust = Me.Customers.SelectedItem
If Customers.CanDelete Then
cust.Delete()
End If
End Sub
partial void DeleteCustomer_Execute()
{
Customer cust =
this.Customers.SelectedItem;
if (Customers.CanDelete)
{
cust.Delete();
}
}
Veri Ekleme
Aşağıdaki örnek, NorthwindData veri kaynağına yeni bir müşteri ekler.Bu örnek, SharePoint listesine eklenen kişi bilgilerini kullanarak yeni müşteriyi tanımlayan alanları doldurur.Örnek, SharePoint'taki hangi kişilerin NorthwindData veri kaynağında içeri aktarılmadığını belirlemek için NewCustomersInSharePoint adlı sorguyu çağırır.
Private Sub ImportCustomers_Execute()
For Each spCust As SharePointCustomer In _
Me.DataWorkspace.SharePointData.NewCustomersInSharePoint
Dim newCust As Customer = New Customer()
With newCust
.ContactName = spCust.FirstName & " " & spCust.LastName
.Address = spCust.Address
.City = spCust.City
.PostalCode = spCust.PostalCode
.Region = spCust.Region
'Set the CopiedToDatabase field of the item in SharePoint.
spCust.CopiedToDatabase = "Yes"
End With
Next
Me.DataWorkspace.SharePointData.SaveChanges()
End Sub
partial void ImportCustomers_Execute()
{
foreach (SharePointCustomer spCust in
this.DataWorkspace.SharePointData.NewCustomersInSharePoint())
{
Customer newCust = new Customer();
newCust.ContactName = spCust.FirstName + " " + spCust.LastName;
newCust.Address = spCust.Address;
newCust.City = spCust.City;
newCust.PostalCode = spCust.PostalCode;
newCust.Region = spCust.Region;
//Set the CopiedToDatabase field of the item in SharePoint.
spCust.CopiedToDatabase = "Yes";
}
this.DataWorkspace.SharePointData.SaveChanges();
}
Verileri Kaydetme
Genellikle kullanıcı ekrandaki Kaydet düğmesine tıkladığında bekleyen değişiklikler, veri kaynağı için uygulanır.Ancak, veri kaynağının SaveChanges yöntemini çağıran kod ekleyerek de bekleyen değişiklikleri uygulayabilirsiniz.Şu görevleri gerçekleştirmek isterseniz bu kodu eklemelisiniz:
Diğer veri kaynaklarında bulunan verileri yaptığınız değişiklikleri uygulayın.
Save ekran olayını geçersiz kılın.
Diğer Veri kaynaklarında Bulunan Verilerde Yaptığınız Değişikliklerin Uygulanması
Özel kod yazdığınız dosyalar, birincil veri kaynağına sahiptir.LightSwitch çözümünüze verileri başka bir veri kaynağından değiştiren özel kod eklerseniz, o veri kaynağına ait SaveChanges yöntemini çağırarak o değişiklikleri uygulayabilirsiniz.
Aşağıdaki örnek, bir kullanıcı Sipariş varlığında bir sipariş oluşturduğunda çalışan kodu gösterir ve sonra Kaydet düğmesine tıklar.Kod, Sipariş Ayrıntıları varlığındaki alanı kullanarak ürün varlığı alanını güncelleştirir.Ürün varlığı başka bir veri kaynağında bulunduğundan bu kod, o veri kaynağının SaveChanges yöntemini değişiklikleri gerçekleştirmesi için çağırır.
Private Sub Orders_Inserting(entity As Order1)
For Each detail In entity.Order_Details
detail.Product.UnitsInStock = detail.Product.UnitsInStock - detail.Quantity
Next
Me.DataWorkspace.ProductDataSource.SaveChanges()
End Sub
partial void Orders_Inserting(Order1 entity)
{
foreach (Order_Detail1 detail in entity.Order_Details)
{
detail.Product.UnitsInStock = (short?)
(detail.Product.UnitsInStock - detail.Quantity);
}
this.DataWorkspace.ProductDataSource.SaveChanges();
}
Ekran Olayını Kaydet Seçeneğinin Geçersiz Kılınması
Save olayını geçersiz kılarak ekrandaki Kaydet düğmesinin davranışını değiştirebilirsiniz.Kaydet düğmesinin davranışını değiştirdiğiniz için, değişiklikleri bekletmek istediğiniz zaman kodunuz SaveChanges yöntemini çağırmalısınız.
Aşağıdaki örnek, kaydetme işlemleri başarısız olursa atılabilecek özel bir istisnayı yakalayıp işlemek için müşteri ekranının Save olayını geçersiz kılar.
Private Sub CustomersListDetail_Saving(ByRef handled As Boolean)
Try
Me.DataWorkspace.SharePointData.SaveChanges()
Catch ex As DataServiceOperationException
If ex.ErrorInfo = "DTSException" Then
Me.ShowMessageBox(ex.Message)
Else
Throw ex
End If
End Try
handled = True
End Sub
partial void CustomersListDetail_Saving(ref bool handled)
{
try
{
this.DataWorkspace.SharePointData.SaveChanges();
}
catch (DataServiceOperationException ex)
{
if (ex.ErrorInfo == "DTSException")
{
this.ShowMessageBox(ex.Message);
}
else
{
throw ex;
}
}
handled = true;
}
Verileri Onaylama
Bir varlığın alanları için özel doğrulama kuralları uygulayabilirsiniz.Kullanıcılar doğrulama kurallarınıza uygun olmayan şekillerde özelliklerin değerini değiştirdiğinde görüntülenen özel hata iletileri ekleyebilirsiniz.Daha fazla bilgi için, Nasıl yapılır: veri doğrulama
Verilerin İzinlerinin Ayarlanması
Tüm kullanıcılar ekranda görünen verileri varsayılan olarak görüntüleyebilir, ekleyebilir, silebilir veya güncelleyebilir.Ancak, aşağıdaki yöntemlerden birine kod ekleyerek bu izinleri kısıtlayabilirsiniz:
CanRead
CanInsert
CanDelete
CanUpdate
Bu yöntemleri kullanarak işlemi sınırlandırmak isterseniz, LightSwitch, kısıtlanmamış izinlere sahip kullanıcılar için işlemi kullanılamaz duruma getirir.Daha fazla bilgi için bkz. Nasıl yapılır: veri olayları işlemek.
Aşağıdaki örnek, kullanıcının güncelleştirme izni varsa kullanıcının müşteri bilgilerini güncelleştirmesini sağlar.Bu kod, RoleUpdate adlı izinler grubunu gerektirir.Uygulamanıza izinler grubu ekleme hakkında daha fazla bilgi için, bkz. Yetkilendirme etkinleştirme ve izinleri oluşturma.
Private Sub Customers_CanUpdate(ByRef result As Boolean)
result = Me.Application.User.HasPermission(Permissions.RoleUpdate)
End Sub
partial void Customers_CanUpdate(ref bool result)
{
result = this.Application.User.HasPermission(Permissions.RoleUpdate);
}
LightSwitch, bir kullanıcı bilgileri görüntüleme, ekleme, silme veya güncelleme girişiminde bulunduğunda bu yöntemleri varsayılan olarak çağırabilir.Veriler okunmadan veya değiştirilmeden önce de özel kodunuzdaki bu yöntemleri çağırabilirsiniz.
Değişiklik Kümeleriyle Çalışma
Bir veri kaynağına uygulanmadan önce bekleyen değişikleri tanımlayabilir ve göz ardı edebilirsiniz.Aşağıdaki örnek, beklemedeki değişiklikleri tanımlayan ve göz ardı eden üç kullanıcı yöntemi gösterir.UndoAllCustomerUpdates yöntemi, tüm müşteriler için yapılan tüm değişiklikleri çıkarır.UndoAllUpdates yöntemi, veri kaynağında yapılan tüm değişiklikleri çıkarır.UndoCustomerEdit yöntemi, müşteri ekranında şu anda seçili veri satırında yapılan değişiklikleri atar.
Private Sub UndoAllCustomerUpdates_Execute()
For Each Cust As Customer In _
Me.DataWorkspace.NorthwindData.Details. _
GetChanges().OfType(Of Customer)()
Cust.Details.DiscardChanges()
Next
End Sub
Private Sub UndoAllUpdates_Execute()
Me.DataWorkspace.NorthwindData.Details.DiscardChanges()
End Sub
Private Sub UnduCustomerEdit_Execute()
Customers.SelectedItem.Details.DiscardChanges()
End Sub
partial void UndoAllCustomerUpdates_Execute()
{
foreach (Customer cust in
this.DataWorkspace.NorthwindData.Details.
GetChanges().OfType<Customer>())
{
cust.Details.DiscardChanges();
}
}
partial void UndoAllUpdates_Execute()
{
this.DataWorkspace.NorthwindData.Details.DiscardChanges();
}
partial void UndoCustomerEdit_Execute()
{
Customers.SelectedItem.Details.DiscardChanges();
}
Modellenmiş Sorguların Genişletilmesi
Sorgu Tasarımcısı'nın yetenekleri ötesinde bir sorgu değiştirmek isterseniz, sorgunun PreProcessQuery yöntemine kod ekleyerek sorguyu genişletebilirsiniz.Daha fazla bilgi için bkz. Nasıl yapılır: kod kullanarak bir sorgu genişletin.