Türü belirtilmemiş ve dinamik nesnelerle çalışma

Power Apps'te eylemlerle çalışırken bazı eylemler için türü belirtilmemiş dönüş değerleri veya giriş değerleriyle karşılaşabilirsiniz. Önceden, Power Apps türü belirlenmemiş veya dinamik giriş alanlarını yok sayar ve bu alanlar PowerFX ifadelerinde görünmezdi ancak artık bu alanlarla doğrudan çalışabilirsiniz. Daha önce, bir dönüş değerinin türü belirlenmediğinde Power Apps bir Boole değeri döndürürdü. Şimdi, bir türü belirtilmemiş nesne döndürüyor.

Not

Power Fx ifadelerinizin, bu işlevlerden bir Boole dönüş değerine dayandığını varsayalım. Bu durumda, formülü yeniden yazmanız ve türü belirlenmemiş nesneyi açıkça bir Boole değerine dönüştürmeniz gerekir. "IfError" gibi bazı işlevler türü belirtilmemiş nesneleri henüz desteklememektedir. İfadeniz böyle bir işlev içeriyorsa, geçici çözüm için bu makalenin sonundaki nota başvurun.

Türü belirtilmemiş nesneleri parametre olarak geçirme

Bazı eylemler için parametre değeri olarak türü belirtilmemiş bir nesne gerekir. Power Fx kaydınız varsa, bunu türü belirtilmemiş nesneye dönüştürerek eyleme aktarılması için uygun duruma getirebilirsiniz.

Aşağıdaki örnekte, Dataverse Firma tablosundaki birleştirme eylemi birkaç türü belirtilmemiş bağımsız değişken gerektirmektedir. Hazırlamak için TargetObject, SubordinateObject ve UpdateContextObject içeren üç değişken tanımlayacağız. Microsoft.Dynamics.CRM.account metin dizesini örnek boyunca yeniden kullanılacak bir değişkene atayarak başlayacağız.

Set (OdataType, “Microsoft.Dynamics.CRM.account”);

Ardından TargetObject name, accountid ve @odata.type özellikleriyle bir Power Fx kaydına atanacak. Benzer şekilde, Power Fx kayıtlarını Subordinate ve UpdateContext nesnelerine de atayacağız.

Set (TargetObject, {name: "Test 2", accountid: "145dc2ba-85a2-ed11-aado-0022482d76a5", '@odata.type': OdataType});
Set (SubordinateObject, {name: FirstRecord.’Account name’, accountid: FirstRecord.Account, ‘@odata.type’ : OdataType });
Set (UpdateContextObject, {telephone1: FirstRecord.’Main Phone’, address1_city: FirstRecord.’Address 1 : City’, ‘@odata.type’ : OdataType }); 

Daha sonra, dönüştürmeden sonra türü belirtilmemiş kayıtları depolamak için üç değişken daha oluşturacağız: TargetUntypedObject, SubordinateUntypedObject ve UpdateContextUntypedObject Dönüştürmeyi gerçekleştirmek için özgün değişkenlerde ParseJSON(JSON()) işlevini kullanacağız. Bu eylem, Power Fx kayıtlarını türü belirtilmemiş nesnelere dönüştürecek.

Set (TargetUntypedObject, ParseJSON(JSON(TargetObject)));
Set (SubordinateUntypedObject, ParseJSON(JSON(SubordinateObject)));
Set (UpdateContextUntypedObject, ParseJSON(JSON(UpdateContextObject)));

Son olarak, hem türü belirtilmemiş hem de türü belirtilmiş olanlar dahil gerekli parametrelere geçirerek birleştirme eylemini çağıracağız.

Environment.Merge({Target: TargetUntypedObject, Subordinate: SubordinateUntypedObject, UpdateContent: UpdateContextUntypedObject, PerformParentingChecks: false  });

Eylem aracılığıyla döndürülen türü belirtilmemiş nesne kullanma

Eylem tabanlı bir bağlayıcı bir nesne döndürürse, bir tür atanmış olup olmamasına bakılmaksızın özelliklerine doğrudan erişilebilir. Bununla birlikte, Power Apps'te etiketleme gibi özel bir amaç için bir özellik kullanmayı hedefliyorsanız öncelikle türünü dönüştürmeniz gerekir.

Aşağıdaki örnekte, httpRequest işlevi daha önceden Boole olarak dönüştürülebilen türü belirtilememiş bir nesne döndürür.

Set (response, Office365Groups.HttpRequest("/v1.0/me", "GET", ""));

Yanıttaki özelliklerden biri displayName'dir. Buna aşağıdaki gibi bir Power Fx ifadesiyle erişilebilir ve türü dönüştürülebilir:

Text(response.displayName)

Power Apps etiket denetiminde kullanmak için Metin nesnesine dönüştürün.

Dynamics alanlarla çalışma

Eylem yanıtları artık dinamik çıkışı yakalıyor ve bu özelliklere erişmek için yukarıda açıklanan yöntemi kullanabilirsiniz. Ayrıca, dinamik giriş alanlarıyla da çalışabilirsiniz.

Microsoft Teams'teki Dinamik giriş gövdessi parametresine sahip 'GetMessageDetails' eylemini göz önünde bulundurun. Daha önce, bu parametre görüntülenemiyor veya belirtilemiyordu. Son güncelleştirmeyle uygun Power Fx kayıt yapısını kullanarak "gövde" adında bir değişken ayarlayabilirsiniz.

Set ( body, ParseJSON(JSON( {recipient: { groupID: “7f733b36-7c7f-4f4c-9699-0a7b7a2b3897”, channelID: “19: 085d522328fb4a439220641006f7f25@thread.tacv2”}}));

Daha sonra, GetMessageDetails eylemini çağırıp yanıtı teamsResponse değişkenine atayabiliriz.

Set (teamsResponse, MicrosoftTeams.GetMessageDetails ( 1661365068558, “channel”, body ));

Önceden Boole döndürmüş olan türü belirtilememiş nesneler döndüren formülleri dönüştürme.

Power Fx sınırlı sayıda türü belirtilmemiş nesne alır bu nedenle formülünüz için açık dönüştürme gerekli olabilir. Özellikle, formülünüz bir Boole yanıtına bağımlıysa, dönüştürmeniz gerekir. Yalnızca bir hata olup olmadığını bilmeniz gerekiyorsa, IsError işlevini kullanabilirsiniz:

If(
  IsError(Office365Outlook.CalendarDeleteItemV2("Calendar", 1)),
  Notify("An Outlook appointment could not be found or could not be deleted")
)

Özellikle IfError aracılığıyla kullanılabilen hata bilgilerine erişmek için türü belirtilmemiş nesneyi Boolean, Text veya Value gibi bir dönüştürme işlevi kullanarak geçerli bir türe dönüştürmeniz gerekir. Bu işlevler, verilmişse bir hata oluşturur. Aşağıdaki örnek bunu göstermektedir:

With({result: Office365Outlook.CalendarDeleteItemV2("Calendar", 1)},
If( IsError(result),
  IfError(
    Boolean(result),  // any conversion function would do, such as Text, Value, …
    Notify("An Outlook appointment could not be found or could not be deleted: " & FirstError.Message)
) ) )