报销单分为头和行, 是一对多关系, 那么在写入行的时候如何获取头的ID 写入来保证逻辑上的关联关系呢? 这里引入了全局变量Record的使用
我们拿微软的案例来说话,
点击创建报销单头的时候 , 如图

用了 Set(SelectedReport2, Last(Expenses2)); 方法设置 ,但是 这个SelectedReport2 是一个表吗,不是, 他和Expence2 不一样,后者数据源是sharepoint .
SelectedReport2 是一个全局变量Record

里面有这么多属性:

这个例子非常好列出来增删改查的4种情况如何使用, 分别是:
查询 Set(SelectedReport2,ThisItem);
新增 Collect(Expenses2, {ApproverName: First(DataCardValue3_1.SelectedItems).Value, CostCenter: First(DataCardValue8_1.SelectedItems).Value, DateSubmitted: Now(), EndDate: DataCardValue6_1.SelectedDate, ID: Text(CountRows(Expenses2) + 1), StartDate: DataCardValue5_1.SelectedDate, Status: “Open”, Title: DataCardValue1_1.Text});
Set(SelectedReport2, Last(Expenses2));
删除
Remove(LineItems2,Filter(LineItems2,ReportID=SelectedReport2.ID));
Remove(Expenses2,First(Filter(Expenses2,ID=SelectedReport2.ID)));
Set(SelectedReport2, Blank());
Set(SelectedLineItem2, Blank());
修改
UpdateIf(Expenses2, ID = SelectedReport2.ID,
{ApproverName: First(DataCardValue9_1.SelectedItems).Value, CostCenter: First(DataCardValue9_2.SelectedItems).Value, EndDate: DataCardValue29_1.SelectedDate,
StartDate: DataCardValue28_1.SelectedDate, Title: DataCardValue24_1.Text});
Set(SelectedReport2, LookUp(Expenses2, ID = SelectedReport2.ID));
Back()
那么行新增的时候如何把头ID 放入?

其他对于行的操作(删除,修改)只是对于行记录SelectedLineItem2 来操作, 和头ID 无关。
细节需要注意,就是collect 方法写入什么, 那么到全局的Record 里面,就有什么数据, 比如ID 最重要的,在collect方法的时候需要写入

如果不写入,RECORD 里面没有
这里有个疑问, 如果COLLECT 的时候不写入ID , 那么查出来之后写到 RECORD里面行吗?
Set(SelectedReport.ID , Last(Expense_Reimbursement_Headers.ID));
好像只能整条记录去写不能单独写记录里面的一个字段?
似乎访问的时候用 SelectedReport.ID 就行,写入就不行?
同时 countrow方法,SharePoint 不支持。。。
//Update(SelectedReport.ID, Last(Expense_Reimbursement_Headers).ID); 也不行 ,语法错误
先用collect 写入SHAREPOINT , 然后用
Patch( SelectedReport, Last(Expense_Reimbursement_Headers), { ID: Last(Expense_Reimbursement_Headers).ID } );
似乎可以了,哈哈
Last(Expense_Reimbursement_Headers) 这个语句只能取表的数据, 不能取RECORD的数据。
SelectedReport 加一个ID, ID值是刚写入表这条记录, 值也是刚写入表这条记录的值。好绕口的感觉