问题描述
因此,我继承了PowerApp的这种野兽,它做的相对简单,可以收集对应用程序中创建的动态测验的响应。操作员创建问题(将项目添加到SPO列表中),然后将测验发送给其他人,然后他们去PowerApp中回答。
因为问题是一时兴起的,或者因为PowerApps无法即时创建新的数据源或无法操纵它使用的数据源,所以QnA对不是每个问题/答案对都有一列被连接成一个巨大的纯文本块,并被推送到一个单独的SPO列表中的一列中,该列表包含以下格式的响应:
问题:Question1文本?答案:答案1文字|问题:Question2文字?答案:Answer2文字等,等等。
我已经找到了需要将正则表达式拆分为QnA对的正则表达式(拆分为条形字符),然后将每个QnA对本质上拆分为2D数组(无论如何,在JavaScript中,我都将拆分为正则表达式/((\?|\.)( Answer: ))/
,因为问题当然可以以句号或问号结尾。
由于PowerApps的功能引擎既怪异又拜占庭,我无法弄清楚的是如何使用该正则表达式将那个blob转换成可以输出到应用程序中的表,以便我的操作员可以将数据提取到更多内容中有用。
编辑1:
靠近一点。使用以下功能,我可以获得2D集合:
ClearCollect(
QnAPairs,ForAll(
'ResponsesList',Split(
'ResponsesList'[@Answers],"|"
)
)
);
对于如何像可以添加到新表中的键/值对一样对待QnA集合中的每个结果,仍然不知所措。
TL; DR?
如何转弯
Name | Date | Answers Person McPerson | mm/dd/yy | Question: Question1 Text? Answer: Answer1 Text | Question: Question2 Text? Answer: Answer2 Text,etc.,etc.
进入
Name | Date | Question1 Text | Question2 Text | ...QuestionN Text Person McPerson | mm/dd/yy | Answer1 Text | Answer2 Text | ...Answer2 Text
解决方法
如果要向操作员显示问题/答案(例如,在画廊中),则需要一个结构,该结构的问题为行而不是列,因此您的结构应为有点像这样:
Name | Date | QuestionsAndAnswers Person McPerson | mm/dd/yyyy | <table>
<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,依次选择“打开”,“浏览”,然后找到您保存的文件。