17.更新美观和发布共享应用

最后,稍微更新美观等,然后发布并共享应用

  1. 文字大小,字体粗细,位置等都条件
    大的文本和小的文本的差距多一点,大的文本尽量细一点,还有,内容的分隔里充分用空格等,看看现代的页面设计标准。
    pw14-1
  2. 标题背景的颜色
    每个页面的标题背景选择,改颜色,最简单。
    其实颜色也可以用变量,用变量来做共用话,还有动态变更等等也可实现
    pw14-2
  3. 更改图像
    从菜单【设置】里面,可以更改应用图像
    pw14-3
  4. 发布应用
    保存应用后,可以发布应用,发布了以后,共享过的其他的人可使用你的最新版本的应用
    pw14-4
  5. 共享应用
    如你还没有共享应用的话别忘了共享给要使用的大家。再别忘了Sharepoint 列表的权限也给大家
    pw14-5

一共享应用,被共享应用的人,打开手机上的PowerApps 应用也可以看到此应用。审批者的话可以用PowerAutomate 应用来直接审批,比浏览器上打开PowerAutomate网站审批更方便。

16.显示标题

上次创建了每个过滤(我叫每个”试图”)的结果页面上,显示当前的过滤的内容更方便,所以BrowseGallery上的标题上显示当前的过滤内容

  1. 标题的文本标签的内容使用变量,这次我用变量名字 var_viewName (用View(试图)是Sharepoint的习惯)
    pw13-1
  2. App的OnStart上 var_viewName 里放值
    ====
    Set(
        var_viewName,
        “我的申请-所有申请”
    );
    ====
    pw13-2
  3. 现在为了方便做一次OnStart 的运行,再菜单里可以运行,就显示”我的申请-所有申请”(因为上次我们设定默认页面显示我的所有的申请)
    pw13-3
    pw13-4
  4. 然后,每个过滤按钮点击的时候更新此变量
    比如,我的申请的已完成的话
    ====
    Set(
         var_viewName,
         “我的申请-已完成”
    );
    ====
    比如,财务使用的按钮的话,
    ====
    Set(
         var_viewName,
         “所有申请-已审批”
    );
    ====
  5. pw13-5

    这样已经实现每个试图的时候的视图名称显示在表头上了,同时我们添加了几个不同的按钮【已提交】【已审批】【已完成】等,公式全是一样

15.更新过滤按钮 – 只显示自己的项或者所有项

当前设定的话,如果管理者或者财务担当者等,对列表里的所有的项有权限的人打开此应用的时候,就马上显示所有的项。这样不方便,所以按钮上追加功能,显示只自己的项,还有按钮显示所有的项。

  1. 打开上次做的【已完成】按钮
    pw12-1
  2. 里面的OnSelect 代码改入戏啊。我们设计,var_showAll 为true的时候只显示自己的,false的时候显示所有项。
    ================
    Set(var_filterStatus,”已完成”);
    Set(var_showAll, false);
    Navigate(BrowseScreen1,None);
    ================
    pw12-2
  3. 打开BrowseGallery的数据的代码的公式
    pw12-3
  4. 公式里,中间的过滤部分追加内容如下
    ================
    If(
         var_showAll,
             true,
             Lower(创建者.Email) = var_userEmail
    )
    ================

    在这里,第一个参数直接放var_showAll,说明var_showAll 是true或者false 的Bool 值。而且没做var_showAll 是否Blank的判断,因为Blank的时候自动被认为false。
    所以,刚打开App的时候,只显示自己的项, 此动作在此应用上方便
    pw12-4

  5. 以上,打开App的时候,还有点击按钮的时候,只显示自己的项了。接下来,财务担当者等要查看所有的项的时候点击的按钮也要准备
    ===============
    Set(var_filterStatus,”已审批”);
    Set(var_showAll, true);
    Navigate(BrowseScreen1,None);
    ===============
    Set(var_filterStatus,”已结束”);
    Set(var_showAll, true);
    Navigate(BrowseScreen1,None);
    ===============
    pw12-5
  6. 此按钮,只给财务担当着显示才好,此设定我用上次准备的 var_showAdmin 变量
    首先文本标签和2个按钮做组合
    pw12-6
  7. 选择组合,右边的visible 里面直接放 var_showAdmin
    pw12-7

就好了,此按钮只财务担当着等打开应用的时候才显示

14.创建过滤按钮

刚打开应用的时候,所有的申请都显示。在菜单页里面添加一个按钮,然后点击了以后只显示【已完成】的申请,就是提供过滤的功能。

  1. 添加按钮,名字叫【已完成】
    pw11-1

  2. 设定按钮的OnSelect 公式
    ========================================
    Set(var_filterStatus,”已完成”);Navigate(BrowseScreen1,None);
    ========================================

    pw11-2

  3. 使BrowseGallery 只显示状态等于 var_filterStatus 的项,此部分先为了了解确认下当前的显示条件,在BrowseGallery 的Items属性
    pw11-3

  4. 默认是这样
    ====================
    SortByColumns(
        Filter(
            [@采购申请书],
            StartsWith(
                标题,
                TextSearchBox1.Text
            )
        ),
        “Title”,
        If(
            SortDescending1,
            Descending,
            Ascending
        )
    )
    =====================

  5. 里面的Filter, 默认是这样
    =====================
    StartsWith(
                标题,
                TextSearchBox1.Text
            )
    =====================
    这个意思是,使用在默认有的搜索框里输入的值,然后表头从此值开始的项显示。
    现在保留此显示条件,再追加状态为var_filterStatus 的项,就变成这样。
    =============================
    Filter(
            [@采购申请书],
            StartsWith(
                标题,
                TextSearchBox1.Text
            ),
            If(
                !IsBlank(var_filterStatus),
                状态 = var_filterStatus,
                true
            )
        )
    ==============================
    意思是,如果 var_filterStatus 不是没有值(刚刚打开应用的时候没有值)的时候,只显示状态字段的值为var_filterStatus,否则true(=不适应条件:就是显示所有的状态)

  6. 改好的公式如下
    pw11-4
  7. 现在,新加的部分又蓝色的下划线,又提示【委派警告。此公式的“Filter”部分可能在大型数据集上无法正常工作】,暂时忽略此警告,将来我们再改善。

  8. 现在,点击一次按钮后显示已完成的项,但没法再显示全部,所以再添加显示全部的按钮。
    此按钮的公式如下
    ====================
    Set(var_filterStatus,Blank())
    ====================
    意思为 var_filterStatus 的值删掉,返回没有值的状态,(在PowerApps上相当null 是 Blank()来实现)
    pw11-5

就完成了,为测试先BrowseScreen 后点击播放,打开菜单页后点击【已完成】就只显示已完成的项了
pw11-6

13.创建菜单页面

创建菜单页。列表页面的左上角放汉堡菜单,然后点击打开菜单页。

  1. 创建新的页面,从左上角的菜单点击新屏幕
    pw10-1
  2. 为了统一感,选择可滚动的页面
    pw10-2
  3. 屏幕的名称改为【菜单页面】之类的
    pw10-3
  4. 然后已有的Label,Canvas等不要所以删掉
    pw10-4
  5. 放一个公司Logo,选择图像,然后选择图像,右边的属性的图像里选择图像文件
    pw10-5
    pw10-6

  6. 就图像进来了
    pw10-6-1
  7. 再加一个文本标签,输入【采购申请单】,还有背景颜色也改一下
    pw10-7
  8. 然后我们在BrowseScreen 里面,添加图标,为打开菜单页

  9. 选择BrowseScreen,从菜单里选择插入-图标-汉堡菜单

    pw10-9

  10. 插入后,颜色改成白色,然后位置大小页调整
    pw10-10
  11. 定义点击的动作。OnSelect里输入代码
    ==============================================
    Navigate(菜单页面,None)
    ==============================================

    (第二个变量的None是动画效果,暂时放None就不做效果)
    pw10-11

  12. 同样,菜单也页面页放图标,选择取消图标
    pw10-12
  13. OnSelect 命令放 Back(), 就是打开之前的屏幕的意思
    ================================================
    Back();
    ================================================

    pw10-13

  14. 就已经创建了菜单页面了,为测试必须选择BrowseScreen 然后播放,就可以确认效果
    pw10-14
    pw10-15

    下次再此菜单页面里放数据过滤的按钮

12.控制按钮的显示条件

因为【完成付款】的按钮,应该财务担当人才能按才对,所以设定完成付款的卡片图部分的显示条件设定。
为定义财务担当人,使用另外准备的Sharepoint 列表,然后打开PowerApps打开时参照此列表来判断当前的人是否财务担当人

  1. 准备列表
    在Sharepoint上创建名字叫AccessControl 的列表,添加名字叫Access的单行栏(选项栏也可以)。列表的权限等按照要求编辑权限只设定管理者等

  2. 标题上输入邮件地址,Access里输入PurchaseRequestAdmin。邮件地址必须全部用小写,为了以后的比对正确。然后,PowerApps开发的时候使用的账号的邮箱地址也要放,否则PowerApps开发时看不到按钮就不方便
    pw9-1
  3. 打开PowerApps
  4. 为了从PowerApps参照SharePoint列表,在PowerApps上的数据源里要添加新做的AccessControl列表
  5. 选择左边的数据源
    pw9-2
  6. 选择Sharepoint
    pw9-3
  7. 在选择连接,虽然显示同样的3个,可能选什么都可以
    pw9-4
  8. 输入或者选择网站,然后选择AccessContro列表
    pw9-5
    pw9-6
  9. 就在数据源里出来AccessControl,以后可以用了
    pw9-7
  10. 然后设定【完全付款】的卡片图显示条件,为了设定,准备var_showAdmin 的变量, 然后PowerApps打开的时候,当前的用户的邮箱地址和AccessControl比对,如果存在项的话就var_showAdmin 设定为true
  11. 点击App
    pw9-8
  12. 确认公式栏里默认选择OnStart
    pw9-9
  13. 公式分两部分,一个是先获取当前的用户的邮件地址,然后把他变成小写,保存到var_userEmail 变量,因为系统提供的邮件地址偶尔大小写混在一起,为AccessControl对比方便先把他变成小写,是在代码里使用邮件地址的通用方法
    ============================
        Set(
            var_userEmail,
            Lower(User().Email)
        );
    ============================
  14. 接下来,列表上尝试获取标题跟此var_userEmail 匹配的项,如果存在想的话,var_showAdmin 设定为true
    首先获取项是这样
    ============================
        LookUp(AccessControl,Title=var_userEmail And Access = “PurchaseRequestAdmin”)
    ============================
  15. 此命令意思为获取满足条件的第一条项,但此LookUp的结果来不能直接判断是否存在,所以获取此Lookup的结果的标题,然后此标题是否Blank 来判断该项是否存在
        ============================
        Set(
            var_showAdmin,
            !IsBlank(LookUp(AccessControl,Title=var_userEmail And Access = PurchaseRequestAdmin”).Title)
        );
        ============================
  16. 所以全体的命令如下
    pw9-10
  17. 然后,上次创建的FinishButton卡片图的显示条件以此 var_showAdmin 来处理
  18. 选择FinishButton 卡片图
    pw9-11

  19. Visible 里输入 var_showAdmin
    偶尔,一输入var_showAdmin 就马上卡图片看不见,这是因为刚才App的OnStart里面写过去var_showAdmin 代码以后,还没启动PowerApps,所以当前开发时的var_showAdmin 是被认为 false, 这样的话,先保存一下,然后PowerApps关掉再启动就会看见。

    pw9-12

    以上,设定结束。用不同的账号来运行测试,如果申请者打开此页面的话看不见完成付款,如果财务担当者打开的时候看得见。

11.更新列表浏览页面

列表浏览页面,PowerApp上用BrowseGallery 控件,显示多条数据。当前使用的模板已经包括一个叫BrowseGallery1 的页面,可自定义。这次我删除默认有的不需要的内容,并添加需要的【状态】列

  1. 选择BrowerGallery1
    pw8-1

  2. 点击属性,然后选择字段的编辑。就显示当前的BrowseGallery上已添加的字段,此字段显示每个项的该字段内容
    pw8-2

  3. 我们的例子,Body1 里面显示【单位】这个我们不需要,所以删除
    pw8-3

  4. 然后我们追加【状态】字段,在BrowseGallery上添加Label(文本标签),然后这个文本标签上绑定该数据的某些字段来设定

  5. 选择BrowseGallery,从工具栏选择文本标签(Label)
    pw8-4
    pw8-4

  6. 自动在BrowseGallery里面文本标签插入进去,某些字段已经绑定
    pw8-5

  7. 在选择BrowseGallery,选择属性,选择字段的编辑,然后选择刚才选择的Label
  8. 要绑定的字段选择【状态】就全部显示每个项的状态的值
    pw8-6
    pw8-7
  9. 为方便文本标签的名称也改成【Status】之类的
    pw8-8

  10. 文字大小,颜色,位置等变更。右边的属性里面可以设定。【填充】是标签的边框跟里面的内容的距离,也要调整,才能实现美观
    pw8-9
    pw8-10

以上已经更新好BrowseGallery,可以播放,看到效果

10.财务处理页面(3)

在财务处理页面最下面,追加按钮,财务担当者付款完了以后点击,点击后申请状态变成【已完成】并付款状态变成【已付款】。已完成后,就不让打开此财务处理页面,申请变成完成只读。

  1. 打开PowerApps,选择财务处理页面
  2. 为了放新的按钮,在Editform里添加新的卡片。要用跟列表列没有绑定的空白的卡片,从添加字段的右边菜单里,选择添加自定义卡片
    pw7-1
  3. 为方便在树状视图里,把卡片的名称改成【FinishButton】之类
    pw7-2
  4. 然后在此卡片里面,添加新按钮
  5. 还有,为显示一个名称,添加【文本标签】
    pw7-3
  6. 在适当的位置上配置
    pw7-4
  7. 然后颜色也都改一下,就容易了解功能
    pw7-5
  8. 这个按钮也使用Flow, 这次在PowerApps的菜单上直接开创建Flow, 选择菜单里的【操作】-【PowerAutomate】
    pw7-6
  9. 选择创建
    pw7-7
  10. PowerAutomate 的页面出来,跟上次差不多,选择PowerApps按钮,然后添加【获取项】,一样设定。ID用动态内容的【PowerApps上提问】
    pw7-8
  11. 下面添加【更新项】,然后里面的值如下:
    =================================
    ID:获取项的ID
    标题:获取项的标题
    状态:已完成
    付款状态:已付款
    结束者Claims:点击动态内容的【PowerApps上提问】,就自动进来【更新项_结束者Claims】
    结束日期:utcNow()
    =================================
    pw7-9
  12. 保存流后,回到PowerApps, 首先选择刚才的Flow, 然后自动出来的Run公式里后面添加变量
    为了更新结束者,在PowerApps上当前Login的人的Email在第二个参数里转过去
    ===================================
    Run(CurrentItem_ID,User().Email)
    ===================================
  13. 启动流后表单也要返回,所以左上角的退回按钮里的代码也在这个完成按钮里放进去。结果如下
    ====================
    完成付款.Run(
    ThisItem.ID,
    User().Email
    );
    ResetForm(EditForm1_2);
    Back();
    ====================
    pw7-8
  14. 就此财务页面完成了,可以测试。点击【已付款完成】后,申请状态变成【已完成】,然后不显示打开财务页面的编辑按钮了
    pw7-11pw7-12

9.财务处理页面(2)

上次已经做了财务处理页面,但留言部分每次要更新整个内容。现在我们把它改称每次追加留言的功能。此功能只用PowerApps也实现但为了更多的了解我现在用PowerAutomate来实现。

基本流程

  1. PowerApps 上,按钮后启动PowerAutomate的流。启动时,把项ID和表单上输入的留言传递给参数。
  2. 在流里收到参数
  3. 流里打开该Sharepoint 项,读出来当前的留言历史
  4. 把收到的新留言加在当前的留言后面,然后加好的值放在留言历史列里更新

开发步骤

  1. 打开PowerAutomate, 新建流
  2. 选择PowerApps按钮
    pw6-1
  3. 添加步骤-选择Sharepoint 里的【获取项】
    pw6-2
  4. 输入网站地址和列表名
  5. 输入ID的时候,选择添加动态内容,点击一次【在PowerApps中提问】
    pw6-3
  6. 自动出来变量,名字叫【获取项_ID】
    pw6-4
  7. 再添加步骤,选择Sharepoint 的【更新项】
    pw6-6
  8. ID和标题输入前面的获取项的结果的相当的值
    pw6-7
  9. 再历史里面,先选择获取项的历史值
    pw6-8
  10. 然后把输入指针放在历史右边
  11. 选择添加动态内容,点击一次【在PowerApps中提问】
    pw6-9
  12. 自动出来变量,名字叫【获取项_历史】
    pw6-10
  13. 流已经创建完。点击左上角的流名,给它好命名,比如【追加留言】
    pw6-12
    pw6-11
  14. 打开PowerApps编辑页面
  15. 当前的历史栏变成只读模式
    pw6-13
  16. 选择历史的DataCard, 然后从工具栏选择文本输入
    pw6-14
  17. 新出来的输入框放在历史后面
    pw6-15
  18. 可以把他变成好名字,比如Comment
    pw6-16
  19. 然后更新添加留言按钮的公式
  20. 以后的Submit 后面,先输入这样==========================================
  21. Set(

    var_history,

    Concatenate(“[“,DataCardValue21.Selected.Value,”]” ,

    “[“,User().FullName,”]” ,

    “[“,Text(Now()),”]” ,

    Text(Comment)

    )

    );

    ==========================================

  22. 这个意思是暂时定义一个变量 var_history, 然后 1. 付款状态的内容, 2. 当前的用户名,3. 当前的时间,4. 留言输入框的内容
    把这些值合并,放在var_history 的意思
    pw6-17
  23. 然后,从菜单点击 PowerAutomate 按钮
    pw6-18
  24. 出来的流里选择【追加留言】
    pw6-19
  25. 自动出来的公式,再加上参数
    结果如下
    PowerApps按钮.Run(ThisItem.ID,var_history);
    pw6-21
  26. 就PowerApps更新也结束了,现在可以测试
  27. 找出来【已审批】的申请,用一个用户来输入留言
    pw6-22
  28. 再用其他的用户来输入其他的留言
    pw6-23
  29. 就看到不同的留言在列表上显示了pw6-24

这次做了留言历史的部分,下次还继续修改功能。

    8.创建财务处理页面

    已经实现了审批,现在要准备审批后的财务处理页面。

    此页面除了显示申请信息之外,要实现更改付款状态功能和留言功能。

    这次用EditScreen 的复制方式来开始(DetailScreen的复制也其实可以)

    1. 跟上次一样,复制Editscreen1,新页面命名为【财务处理页面】
      pw5-1
    2. 添加需要的列
    3. 不需要编辑的列,把它变成只读
    4. 需要的时候,你要先点击解锁按钮,然后DisplayMode 里面输入 DisplayMode.View
      pw5-3pw5-4
    5. 就该列变成显示模式
      pw5-5
    6. 其他的列也一样,这次把标题,供应商,单位,付款方式,目的,付款备注,金额,状态,审批者,审批时间这些列添加进去,并做只度模式
    7. 然后在添加付款状态 历史,和附件,这3个要保留编辑模式
    8. 历史栏需要高一点
      pw5-7
    9. 添加保存留言的按钮。这次在历史栏的DataCard 里面放进去(因为以后下面还需要加点东西)
      pw5-8
    10. 为了了解方便,付款状态和历史栏的背景颜色更改
      可以使用上面的颜色按钮,也可以在属性的Fill 里面直接输入颜色
      pw5-9pw5-10
    11. 按钮的颜色也更改,这样好了解当前需要的动作的范围
    12. 定义按钮的动作。这次因为只保存,输入SubmitForm(EditForm1_2)
      pw5-11
    13. 我们虽然只做了一半,先设定编辑时打开此表单
    14. 选择显示页面DetailSceen
      pw5-12
    15. 选择右上角的编辑按钮
      现在要设定此按钮,在当前的申请的状态为【已审批】的时候才显示此编辑按钮,并点击后跳过去我们刚才创建的才处理页面。
    16. Visible里面输入
      If(DataCardValue8.Text=”已审批”,true,false)
      DataCartValue8 代表当前表单的状态栏,这个数字要按照你的当前的表单情况。
      这个公式的意思是,当前的状态已审批的时候,(给Visible的值) 返回true,否则返回false
      pw5-14
    17. OnSelect的值修改如下
      EditForm(EditForm1_2);Navigate(财务处理页面,ScreenTransition.None)
      pw5-15
    18. Visible的值改了以后,PowerApps编辑系统里可能看不到此编辑按钮,操作时需要在树状视图里选择
    19. 现在已经可以使用财务处理页面了,启动播放试一下功能
    20. 找出来【已提交】的申请,点击
    21. 点击右上角的编辑按钮
      pw5-17
    22. 变更付款状态,输入留言内容,点击【添加留言】
      pw5-18
    23. 重新打开显示表单,确认刚才输入的内容有
      pw5-19

    这次只做了财务处理页面的初步功能,下次追加更多功能。