Aracılığıyla paylaş


Büyük ve karmaşık tuval uygulamaları oluşturma

Belgelerin bu bölümündeki makalelerin çoğu, uygulamaların kullanacak kişiler tarafından deneyimlendiği çalışma zamanı performansını kapsar. Bu makalede, yapan kişilerin sağladığı uygulama performansı yer almaktadır.

Uygulamalar büyüdükçe ve daha karmaşıklaştıkça, Power Apps Studio'nun katlanarak büyüyen karşılıklı bağımlılıklarla birlikte çok sayıda denetim, formül ve veri kaynağı yükleyip yönetmesi gerekir. Power Apps Studio'nun uygulama yükleme süresi yavaşlayabilir ve IntelliSense ve renk kodlaması gibi özellikler gecikebilir. Power Apps Studio'da büyük ve karmaşık uygulamalarla daha iyi çalışmak için aşağıdaki önerileri kullanın. Bunlar ayrıca, uygulamalarının çalışma zamanı performansını geliştirmeye yardımcı olabilirler.

Bu makaledeki örnekler Hastane Acil Müdahale örnek çözümünü temel almaktadır.

App.OnStart yerine App.Formulas kullanın

İpucu

Adlandırılmış formüllere alternatif olarak with işlevi ve tuval bileşeni özel çıktı özelliklerini kullanabilirsiniz.

Power Apps Studio ve son kullanıcı uygulamanız için yükleme süresini azaltmanın en iyi yolu, App.OnStart'taki değişken ve koleksiyon başlatmayı App.Formulas'daki adlandırılmış formüllerle değiştirmektir.

Aşağıda App.OnStart kullanan aşağıdaki örneğe bakalım.

// Get the color of text on a dark background.
Set(varColorOnDark,RGBA(0, 0, 0, 1));

// Get the color of the menu icons.
Set(varColorMenuIcon,"#0070a9");

// Get the styles for a form.
Set(varFormStyle,
    {
        DataCard: { Height: 50 },
        Title: { Height: 50, Size: 21, Color: varColorOnDark },
        Control: { Height: 50, Size: 18 },
        Label: { Size: 18, Color: varColorOnDark }
    }
);

ClearCollect(
    FacilitiesList,
    ForAll(
        Facilities,
        { Name: 'Facility Name', Id: Facility }
    )
);
If(
    Not IsBlank(Param("FacilityID")),
    Set(ParamFacility,
        LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Name
    );
);

Bunlar ifadeler dizisi olduğu için uygulamanız bu Set ve Collect çağrılarının ilk ekran görüntülenmeden önce sırayla değerlendirilmesi gerekir, bu da uygulama yükleme süresini yavaşlatır. Tüm App.OnStart'ın nihai sonucu döndürmeden önce bir bütün olarak ele alınması, siparişin korunması ve hataların toplanması için formül, Power Apps Studio'nun analiz edemeyeceği kadar karmaşıktır.

Daha iyi bir yol izlenebilir. App.Formulas kullanın ve bu değişkenleri ve koleksiyonları adlandırılmış formüller olarak tanımlayın, aşağıdaki örnekteki gibi.

// Get the color of text on a dark background.
varColorOnDark = RGBA(0, 0, 0, 1);

// Get the color of the menu icons.
varColorMenuIcon = "#0070a9";

// Get the styles for a form.
varFormStyle = 
    {
        DataCard: { Height: 50 },
        Title: { Height: 50, Size: 21, Color: varColorOnDark },
        Control: { Height: 50, Size: 18 },
        Label: { Size: 18, Color: varColorOnDark }
    };

FacilitiesList =
    ForAll(
        Facilities,
        { Name: 'Facility Name', Id: Facility }
    );

ParamFacility = 
    If( Not IsBlank(Param("FacilityID")),
        LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Name,
        Blank()
    );

Bu değişiklik küçük görünebilir ancak büyük bir etkisi olabilir. Her adlandırılmış formül diğerlerinden bağımsız olduğu için, Power Apps Studio bunları bağımsız olarak çözümleyebilir ve büyük App.OnStart'ı küçük parçalara bölebilir. Power Apps Studio yükleme süresinin yalnızca bu değişiklik ile %80 kadar düştüğünü gördük.

Uygulamanız aynı zamanda daha hızlı yüklenir çünkü sonuca ihtiyaç duyuncaya kadar bu formülleri değerlendirmek zorunda değildir. Uygulamanın ilk ekranı hemen görüntülenir.

Adlandırılmış formüller, bunları değiştiremediğiniz veya Ayarla ile kullanamadığınız için tüm durumlarda kullanılamaz. Bazı durumlar, değiştirilebilen bir durum değişkeninin kullanılmasını gerektirir. Bu durumlar için bir Ayarlama mükemmeldir ve onu kullanmaya devam etmeniz gerekir. Ancak, çoğu zamankinden daha sık olarak, henüz değişmeyen statik değerler ayarlamak için OnStart'ta genel değişkenler kullanıyorsunuz. Bu durumda, adlandırılmış bir formül daha iyi bir seçimdir.

Adlandırılmış formüller sabit olduğundan, adlandırma kuralı olarak var öneki ("değişken" için kısa) artık uygun olmayabilir. Bu örnekteki adları değiştirmedik çünkü uygulamanın kalan kısmıyla eşleşecek değişiklikleri gerektirir.

App.OnStart'a adlandırılmış bir formül yerleştirmek caziptir, ancak yapmayın. Bunlar oraya ait değildir. Bir On davranış özelliği olarak App.OnStart, deyimlerinin her birini sırayla değerlendirir, genel değişkenler oluşturur ve uygulama yüklendiğinde veritabanlarıyla yalnızca bir kez konuşur. Adlandırılmış formüller, gerektiğinde bir şeyin nasıl hesaplanacağını tanımlayan ve her zaman doğru olan formüllerdir. Bağımsız olmalarını sağlayan ve uygulamanın değerlendirilmeden önce yüklemeyi tamamlamasına izin veren bu formül doğasıdır.

Uzun formülleri bölme

App.OnStart, uzun formüllerde iyi performans göstermeyebilir ve kesinlikle başlamanız gereken yerdir ancak tek sorun bu değildir.

Çalışmalarımız, uzun Power Apps Studio yükleme süresine sahip uygulamaların neredeyse tamamının 256.000 karakterden fazla en az bir formüle sahip olduğunu göstermiştir. En uzun yükleme sürelerine sahip bazı uygulamalar 1 milyon karakterden fazla formüle sahiptir. Uzun formüller, Power Apps Studio'yu zorlar.

Daha da kötüsü, uzun formüllü bir denetimi kopyalayıp yapıştırmak, formülü gerçekleştirmeden denetim özelliklerini yineler. Power Apps, Excel ardından modellenmiştir, burada formülün birden fazla kopyası olağandır. Bununla birlikte Excel formülleri tek bir ifade ile sınırlıdır ve limiti 8.000 karakterdir. Power Apps formülleri, zorunlu mantığın ve işleçleri zincir haline getirmenin (yerel ayara bağlı olarak ; veya ;;) tanıtılmasıyla çok daha da büyüyebilir.

Genel çözüm, uzun formülleri daha küçük parçalara bölmek ve App.OnStart'taki Set/Collect'in yukarıdaki App.Formulas'taki adlandırılmış formüllere geçişinde önceki bölümde yaptığımız gibi bu parçaları yeniden kullanmaktır. Diğer programlama dillerinde, bu yeniden kullanılabilir bölümler genellikle alt yordamlar veya kullanıcı tarafından tanımlanan işlevler olarak adlandırılır. Adlandırılmış formülleri, parametreler olmadan ve yan etkileri olmadan kullanıcı tanımlı işlevlerin basit bir biçimi olarak düşünebilirsiniz.

Adlandırılmış formülleri her yerde kullanma

Önceki örnekte, App.OnStart için değiştirme olarak adlandırılmış formüller kullanılmaktadır. Ancak, bir uygulamanın herhangi bir yerindeki bir hesaplamasını değiştirmek için kullanabilirsiniz.

Örneğin, Hastane Acil Durum Yanıt örnek çözümündeki ekranlardan biri de bu mantığı Screen.OnVisible ekler:

ClearCollect(
    MySplashSelectionsCollection,
    {
        MySystemCol: First(
            Filter(
                Regions,
                Region = MyParamRegion
            )
        ).System.'System Name',
        MyRegionCol: First(
            Filter(
                Regions,
                Region = MyParamRegion
            )
        ).'Region Name',
        MyFacilityCol: ParamFacility,
          MyFacilityColID:  LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Id
    }
); 

Bu formül adlandırılmış formüller kümesine bölünebilir. Ayrıca, formülün daha kolay okunmasını sağlar.

MyRegion = LookUp(
                    Regions,
                    Region = MyParamRegion
           );

MyFacility = LookUp(
                    FacilitiesList,
                    Id = GUID(Param("FacilityID")
            );

MySplashSelectionsCollection = 
    {
        MySystemCol: MyRegion.System.'System Name',
        MyRegionCol: MyRegion.'Region Name',
        MyFacilityCol: ParamFacility,
        MyFacilityColID:  MyFacility.Id
    };

Set çağrılarının çoğunu App.OnStart'tan App.Formulas'taki adlandırılmış formüllere taşıdığımızda ParamFacility, daha önce adlandırılmış bir formül olarak ayıklamıştık.

Adlandırılmış formüller yalnızca değerleri gerektiğinde değerlendirilir. Screen.OnVisible kullanmanın asıl amacı, ekran gösterilene kadar çalışmayı ertelemekse çalışma App.Formulas'ta genel adlandırılmış formüller olarak ertelenmeye devam edecektir.

With işlevini kullanma

Ayrıca mantığı bölmek için formülde With işlevini kullanabilirsiniz. İlk parametrede alan olarak istenen değerlerle bir kayıt oluşturun ve ardından bu alanları ikinci parametrede With işlevinden dönüş değerini hesaplamak için kullanın. Örneğin, önceki örnek yalnızca bir adlandırılmış formül olarak yazılabilir:

MySplashSelectionsCollection = 
    With( { MyRegion: LookUp(
                            Regions,
                            Region = MyParamRegion
                      ),
            MyFacility: LookUp(
                            FacilitiesList,
                            Id = GUID(Param("FacilityID")
                      ) 
           },
           {
                MySystemCol: MyRegion.System.'System Name',
                MyRegionCol: MyRegion.'Region Name',
                MyFacilityCol: ParamFacility,
                MyFacilityColID:  MyFacility.Id
           }
    )

With kullanmanın dezavantajı ise MyFacility'nin adlandırılmış formüllerde bulunmayan bir sorun olan aynı With işlevi içinde tanımlı oldukları için MyRegion'ı kullanamamalarıdır. Çözümlerden biri, With işlevlerini iç içe geçirmek ve tüm With değişkenlerine kolay erişim sağlamak amacıyla her birinin kaydını adlandırmak için As anahtar sözcüğünü kullanmaktır.

Tuval bileşenlerini kullanma

Tuval bileşenleri genellikle tuvale tıpkı bir denetim gibi yerleştirilebilen bir kullanıcı arabirimi denetimi oluşturmak için kullanılır. Buna ek olarak adlandırılmış formüllere alternatif olan özel çıktı özellikleriyle hesaplamalar yapmak için kullanıcı arabirimi olmadan da kullanılabilirler. Tuval bileşenleri bileşen kitaplıkları ile uygulamalar genelinde kolaylıkla paylaşılabilir ve adlandırılmış formüllerin aksine bunlar tamamen desteklenir. Ancak bunlar adlandırılmış formüllere kıyasla daha zor yapılandırılır ve kullanılır.

Mantığı bölmek için:

  1. Power Apps Studio içinde, Ağaç görünümünde Bileşenler sekmesine geçin.
  2. Yeni bir bileşen oluşturma.
  3. Özellikler bölmesinde, Uygulama kapsamına erişim'i açın.
  4. Özel özellik ekleyin.
  5. Özellik türü'nü Çıktı ve Veri türü'nü uygun şekilde ayarlayın.
  6. Oluştur'u belirleyin.
  7. Ekranın üstündeki formül çubuğunun yanındaki özellik seçicide yeni özelliği seçin.
  8. Bölünecek ve yeniden kullanılacak mantığın formülünü yazın.

Mantığı kullanmak için:

  1. Ağaç görünümünde Ekranlar sekmesine geçin.
  2. Ekle bölmesinde, Özel'i genişletin ve bileşeninizi yerleştirin.
  3. Özellik ile bir değer hesaplamak için ComponentName.PropertyName'i kullanın.

Zorunlu mantık için gizli bir denetimle Select'i kullanma

Zorunlu mantık, Set ve Collect ile durumu değiştirmek, Notify ile kullanıcıyı bilgilendirmek, Navigate ve Launch ile başka bir ekrana veya uygulamaya gitmek ve Patch, SubmitForm veya RemoveIf ile değerleri bir veritabanına yazmak için kullanılır.

Adlandırılmış formüller ve tuval bileşeni özel çıktı özellikleri, zorunlu mantığı desteklememektedir. Zorunlu mantığı bölmek için yaygın bir yöntem, gizli bir denetimin OnSelect özelliğini kullanmaktır.

  1. Bir ekrana Düğme denetimi ekleyin.
  2. OnSelect özelliğini, yürütmek istediğiniz zorunlu mantığa ayarlayın.
  3. Kullanıcının görebilmesi veya onunla etkileşime geçemediğinden, Görünür özelliğini yanlış olarak ayarlayın.
  4. Zorunlu mantığı yürütmek istediğinizde Select( Button ) öğesini arayın.

Örneğin, örneğimizin ekranlarından biri, bir Düğme denetiminde aşağıdaki OnSelect özelliğine sahiptir. (Bu basit örnek yalnızca çizim amaçlıdır. Normalde bu tekniği daha uzun formüller için kullanacaksınız.)

btnAction_17.OnSelect = 
    Trace("Feedback Screen: Submit Button",TraceSeverity.Information);
    If(
        // Proceed if all forms are validated.
        And(
            FormFeedback.Valid
        ),
    
        // Set the updates to static variables.
        Set(updatesFeedback,Patch(Defaults('App Feedbacks'), FormFeedback.Updates));
        // Submit the first form. Subsequent actions can be found in the OnSuccess.
        SubmitForm(FormFeedback);
        ,
    
        Notify("Please complete all fields before proceeding",
               NotificationType.Warning,2000)
    );

Bu mantığı parçalara bölmek için, bölümleri ayrı Düğme kontrollerine koyabilir ve bunları orijinalinden seçebiliriz:

btnTrace.OnSelect = 
    Trace("Feedback Screen: Submit Button",TraceSeverity.Information);

btnSubmit.OnSelect = 
    If(
        // Proceed if all forms are validated.
        And(
            FormFeedback.Valid
        ),
    
        // Set the updates to static variables.
        Set(updatesFeedback,Patch(Defaults('App Feedbacks'), FormFeedback.Updates));
        // Submit the first form. Subsequent actions can be found in OnSuccess.
        SubmitForm(FormFeedback);
        ,
    
        Notify("Please complete all fields before proceeding",
               NotificationType.Warning,2000)
    );

btnAction_17.OnSelect = 
    Select( btnTrace );
    Select( btnSubmit );

Bu teknik yalnızca aynı ekran üzerinde çalışır. Daha karmaşık olan diğer teknikler ekranlar arasında çalışır, İkili düğme kontrolünü kullanma, OnCheck ayarını çalıştırmak istediğiniz mantığa ayarlama ve Varsayılan ayarını genel bir değişkene ayarlayıp ardından mantığı çalıştırmak istediğiniz noktada Set( global, true ); Set( global, false ) ile genel değişkeni değiştirme gibi.

Bu örnekte, bazı mantık bölünmesi zaten yapılmıştır. Yorumda "OnSuccess içinde ek eylemler bulunabilir" ifadesine yer verilir. Bu olay, kayıt başarıyla gönderildikten sonra, SubmitForm işlevine özgü bir çözüm olan zorunlu mantığı çalıştırır.

Uygulamayı bölümleme

Bazı uygulamalar binlerce denetime ve yüzlerce veri kaynağına büyür ve bu da Power Apps Studio'yu yavaşlatır. Uzun formüllerde olduğu gibi, büyük uygulamalar tek bir kullanıcı deneyimi oluşturmak için birlikte çalışan daha küçük bölümlere ayrılabilir.

Tuval uygulamalarını bölme

Uygulanabilecek yöntemlerden biri de ayrı tuval uygulamalarında bölüm uygulamak ve ayrı uygulamalar ve geçiş gerekli içeriği arasında gezinmek için Başlatma işlevini kullanmaktır.

Bu yaklaşım Hastane Acil Müdahale örnek çözümünde kullanılmıştır. Ayrı uygulamalar, tüm uygulamanın her bir ana alanını yönetir. Uygulamalar, ortak bir geçiş panosu bileşenini her uygulamanın başlangıç ekranında gösterdiği bir bileşen kitaplığı aracılığıyla paylaşır:

Telefonda çalışan Hastane Acil Durum Müdahalesi çözümü tuval uygulaması; dağıtım paneli tuval bileşeni gösterilen ekran görüntüsü.

Kullanıcı bir alan seçtiğinde, bileşen kullanılabilir uygulamalar ve bileşeni hangi uygulamanın barındırdığı hakkındaki meta verileri kullanır. İstenilen ekran bu uygulamadaysa (yani ThisItem.Screen boş değilse) bir Navigate çağrısı yapılır. Ancak istenen ekran farklı bir uygulamadaysa (yani ThisItem.PowerAppID boş değilse) hedefin Uygulama Kimliği ve FacilityID bağlamıyla birlikte bir Launch işelvi kullanılır:

If(
    IsBlank(ThisItem.Screen),
    If(IsBlank(ThisItem.PowerAppID), 
        Launch(ThisItem.URL),           
        Launch("/providers/Microsoft.PowerApps/apps/" & ThisItem.PowerAppID, 
               "FacilityID", Home_Facility_DD.Selected.Id)
    ),
    Navigate(
        ThisItem.Screen,
        Fade
    )
);

Orijinal uygulamadaki durumlar, başka bir uygulamada başlatıldığında kaybolur. Başlatma işlevini çağırmadan önce durumları kaydettiğinizden emin olun. Veritabanına yazın, SaveData çağırın veya durumu, Param işlevi ile okunan parametreler ile hedef uygulamaya geçirin.

Özel sayfalara sahip model temelli uygulama

Bölümler özel sayfalar olarak da uygulanabilir. Özel sayfalar, gezinme için model temelli bir uygulama kapsayıcısıyla mini bir tuval uygulaması işlevi görür.

Not

Belge dili tercihlerinizi bizimle paylaşabilir misiniz? Kısa bir ankete katılın. (lütfen bu anketin İngilizce olduğunu unutmayın)

Anket yaklaşık yedi dakika sürecektir. Kişisel veri toplanmaz (gizlilik bildirimi).