1

所以,我继承了 PowerApp 的这种野兽,它做一些相对简单的事情,收集对应用程序中创建的动态测验的响应。操作员创建问题(将项目添加到 SPO 列表),然后将测验发送给人们,然后他们在 PowerApp 中回答。

因为这些问题或多或少是随心所欲地创建的,并且因为 PowerApps 不能动态创建新数据源或操纵它使用的数据源,而不是为每个问题/答案对都有一个列,所以这些 QnA 对被连接到一大块纯文本,并被塞入一个单独的 SPO 列表中的一列,其中包含以下格式的响应:

问题:问题1 文本?答案:答案 1 文本 | 问题:问题2 文本?答案:Answer2 文字等,等等。

我已经弄清楚了我需要将块拆分为 QnA 对(在条形字符上拆分)然后每个 QnA 对本质上是一个二维数组(在 JavaScript 中,无论如何,我会在正则表达式上拆分,/((\?|\.)( Answer: ))/因为当然,问题可以以句号或问号结尾)。

由于 PowerApps 的函数引擎很奇怪而且拜占庭式,我不太明白如何使用该正则表达式将该 blob 转换为我可以输出到应用程序中的表,以便我的操作员可以将数据提取到更有用的东西中。

编辑1:

越来越近了。使用以下功能,我可以获得 2D 集合:

ClearCollect(
    QnAPairs,
    ForAll(
        'ResponsesList',
        Split(
           'ResponsesList'[@Answers],
           "|"
        )
    )
);

仍然不知道如何处理 QnA 集合中的每个结果,就像我可以添加到新表中的键/值对一样。

TL;博士?

怎么转

姓名            | 日期     | 答案
人麦克森 | 月/日/年 | 问题:问题1 文本?答案:答案 1 文本 | 问题:问题2 文本?答案:Answer2 文字等,等等。

进入

姓名            | 日期     | 问题1 正文| 问题2 正文| ...问题文本
人麦克森 | 月/日/年 | 答案 1 文本 | 答案 2 文本 | ...答案 2 文本
4

1 回答 1

1

如果您想向操作员显示问题/答案(例如,在画廊中),那么您需要一个将问题作为而不是列的结构,因此您的结构有点像这样:

姓名            | 日期       | 问题和解答
人麦克森 | 月/日/年 | <表格>

哪里<table>会有单独的问题和答案作为行。您可以使用如下表达式创建新结构:

    ClearCollect(
        QnAPairs,
        DropColumns(
            AddColumns(
                ResponsesList,
                "QuestionsAndAnswers",
                MatchAll(Answers, "Question:\s?(?<question>[^\?]+)\?\s?Answer\s?:\s?(?<answer>[^|]+)")),
            "Answers"))

因此,在您的应用程序中,如果您有一个画廊,其中列出了 Items 属性设置为 QnAPairs 的所有受访者,您可以拥有第二个画廊,并将 Items 属性设置为Gallery1.Selected.QuestionsAndAnswers,它将显示所选人员的问答。

请注意,您不需要单独的集合;如果将第一个库的 Items 属性设置为原始数据源 ( ResponseList),则可以将第二个库的 Items 属性设置为

MatchAll(
    Gallery1.Selected.Answers,
    "Question:\s?(?<question>[^\?]+)\?\s?Answer\s?:\s?(?<answer>[^|]+)")

它将显示所选人员的答案。

您可以在https://carlosfigueirapastorage.blob.core.windows.net/public/StackOverflow63425784.msapp找到显示此策略的应用程序。要打开它,请将其保存在本地,然后转到https://create.powerapps.com,选择打开、浏览,然后找到您保存的文件。

于 2020-08-16T15:26:16.800 回答