Aracılığıyla paylaş


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.
        }
    }
}

Ff851990.collapse_all(tr-tr,VS.110).gifGezinme 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.

}

Ff851990.collapse_all(tr-tr,VS.110).gifSorgu Ç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.

Ff851990.collapse_all(tr-tr,VS.110).gifDiğ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();

}

Ff851990.collapse_all(tr-tr,VS.110).gifEkran 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.

Ayrıca bkz.

Kavramlar

LightSwitch içindeki kod yazma