一、EditForm為新建時設置DataCard字段的默認值
1、文本
If(DetailEditForm.Mode=FormMode.New,myself.FullName,ThisItem.Applicant申請人)
2、時間
If(DetailEditForm.Mode=FormMode.New,Now(),ThisItem.收料日期)
3、人員
在窗體的OnVisible中設置:
Set(myself, User())
然後使用
If(DetailEditForm.Mode=FormMode.New,{
DisplayName: myself.FullName,
Claims: "i:0#.f|membership|" & myself.Email
},ThisItem.Applicant申請用户)
還可以設置經理
Set(myself, Office365Users.MyProfileV2()); Set(manager, Office365Users.Manager(myself.id))
獲取部門
Office365Users.MyProfileV2().department
4、選項
If(DetailEditForm.Mode=FormMode.New,{Value:"待審批"},ThisItem.'Order Status狀態')
二、給DataCard通過PowerFx設置值並提交審批
DataCard的Default增加If(IsBlank(varTriggerApproval),ThisItem.是否審批,varTriggerApproval)
同時審批按鈕的OnSelect增加Set(varTriggerApproval,true);Set(varNewRecord,SubmitForm(Form5));
三、通過Url中的參數指定打開App時的Sceen及gallery選項
1、App的OnStart中設置
If(
Param("Screen") = "DetailScreen",
Navigate(DetailScreen)
)
2、Gallery的Default中設置
If(IsBlank(Param("ID")),{},LookUp(ShowColumns('Scrap Parts Application Order', "Title","ID"), ID = Int(Param("ID"))))
3、可以通過url訪問
https://apps.powerapps.com/play/e/XXXXXXXX&Screen=Screen2&ID=2
四、App.OnStart中使用Navigate方法
在App的設置中選擇 即將推出的功能——已停用——在App.OnStart中啓用Navigate函數
但是這樣會對性能產生很大的影響,不建議使用這種方法,建議使用App.StartScreen代替,If(Param("Screen")="Screen1",Screen1,Screen2)
五、創建可滾動的Screen
創建Screen的時候可以選擇“可滾動的Screen”,但是對於已經創建好的Screen,是無法直接改為可滾動的。另外可滾動的Screen中的Canvas目前也無法插入Form和Gallery,所以可以通過另外的方式創建滾動條
1、在Screen中插入一個垂直容器,並將垂直窗口的垂直溢出設為滾動
2、將其他控件添加到窗口中
六、通過Gallery實現可編輯的子表
默認的顯示子表的控件有“數據表”,但是這個只能查看不能直接編輯,不是很方便,所以考慮通過Gallery來實現一個可編輯的子表
1、 先放入一個水平容器,用來存放創建、保存按鈕
2、再放入一個垂直容器TableContainer,用來存放 工具欄、表格表頭以及Gallery表格
3、在TableContainer容器中加入TableHeaderContainer,將此容器的靈活高度設為false,並插入文本控制顯示錶頭
4、在TableContainer容器中加入垂直空白庫,在裏面加入各種輸入控件,設置控件的Default為ThisItem.XXX,設置控件的Width等於上面文本顯示控件的Width,設置設置控件的X等於上面文本顯示控件的X
5、給按鈕增加方法
添加按鈕:
Patch('Scrap Parts Application Orderline',Defaults('Scrap Parts Application Orderline'),{Title:"不良品入庫單"+Text(OrderListGallery.Selected.ID)+"明細",Classes班次:ddlClassed.Selected,MainListId:OrderListGallery.Selected.ID});
Refresh('Scrap Parts Application Orderline');
Reset(OrderLinesGallery);
保存按鈕:
ForAll(OrderLinesGallery.AllItems,Patch('Scrap Parts Application Orderline',{ID:ThisRecord.ID},{Classes班次:ddlClassed.Selected,Model型號:tbModel.Text,成品工位號:tbProductStation.Text,半成品工位號:tbSemiFinished.Text,不良描述:tbFault.Text,CR04:tbCR04.Text,Equipment設備:tbEquidment.Text,Operation操作:tbOperation.Text,質量分析:tbQualityAnaly.Text,CR01:tbCR01.Text,料費處理:ddlMaterial.Selected,扣款情況:ddlDeduction.Selected,Description備註:tbDesc.Text,Quantity數量:Int(tbQuantity.Text),Logistics物流:tbExpress.Text,Design設計:tbDesign.Text}));
Refresh('Scrap Parts Application Orderline');
Reset(OrderLinesGallery);
七、Form裏面通過選項集的值設置其他數據卡的可見性
在要設置的數據卡中找到Visible屬性,設置為DataCardValue8.Selected.Value="外部使用收費External Have to pay"
注意選項的值是要找對應的選項控件的Selected.Vaue,而不是選項字段的數據卡的Default
八、根據狀態給文本框設置不同的顏色
找到文本框的Color屬性,設計公式If(ThisItem.OrderStatus.Value="完成",RGBA(153, 153, 153, 1),RGBA(0,0,0,1))
九、比較當前用户和人員字段的用户
可以通過User()獲取PowerApps當前登錄用户,但是通過If(User()=varSelectedRecord.Applicant)會匹配不上,因為是不同類型的對象
所以可以比較他們的屬性If(User().Email=varSelectedRecord.Applicant.Email)
但是要注意,即使同一個用户可能他們的郵箱會不同,因為一個是Dataverse中的用户下的郵箱,一個是AAD中的用户的郵箱,可能設置得不一樣
這裏可能需要引入Office365User連接器,然後通過MyProfile V2進行對比
十、嵌入超鏈接
1、可以通過Html文本控件
將Html文本 控件的HtmlText設為"<a href='http://baidu.com'> 點擊打開百度 </a>"
2、可以在文本標籤控件的OnSelect屬性中調用Launch方法
Launch(Url, Parameters, Target)
Target: New, Replace,name
Launch( "http://bing.com/search",
{ q: "Power Apps", count: 1 },
LaunchTarget.Replace )