【问题标题】:Canvas Power App to upload file to Salesforce using Rest APICanvas Power App 使用 Rest API 将文件上传到 Salesforce
【发布时间】:2021-06-22 16:06:19
【问题描述】:

我是 PowerApps 和流程自动化的新手。我正在构建一个简单的 Canvas Power App,它接收用户输入,然后组成 JSON,并使用 REST API 通过流将 JSON 发布到 Salesforce。提交按钮操作如下所示

Collect(
     FormInfo,   {
         name: nameInput.Text,
         title: titleInput.Text,
         manager: managerInput.Text,
         phoneNumber: phoneNumInput.Text,
         email: emailInput.Text,
         startDate: Text(startDateInput.SelectedDate),
         roleProfileInfo: roleProfileInfoInput.Text,
         userSubmitting: User().Email   }
 );
 Set(FormObj,JSON(FormInfo));
    
 SFNewUserRequest_1.Run(FormObj);
    
    
 Reset(nameInput);
 Reset(titleInput);
 Reset(managerInput);
 Reset(phoneNumInput);
 Reset(emailInput);
 Reset(startDateInput);
 Reset(roleProfileInfoInput);

用户输入被组合成 JSON 并将其发送到流。我不确定如何在 Power 应用程序中添加需要通过 REST 服务发送到 Salesforce 的上传文件。那里的大多数示例都是将文件加载到 Sharepoint 库,我只是想知道这是否也是可行的。

【问题讨论】:

  • 什么类型的文件? .jpg、.png、.xlsx、.pdf 等?

标签: salesforce rest powerapps powerapps-canvas


【解决方案1】:

这是可能的。在某些情况下,您必须创造性地解析出正确的 Base64 编码图像数据(如果尝试将 .jpg/.png 传递给 Power Automate)。

这是我在用户使用Add Media 控件选择图像后使用Save 按钮的OnSelect 的一些代码:

Set(varFileExt, Right(btnAddMedia.FileName, 3));

Collect(colPhotoForFlow,
    {
        projectGUID: varGUID,
        picUri: imgAddedMedia.Image,
        picFilename:
            If(
                btnAddMedia.FileName = "image.jpg",
                Concatenate(
                    Text(Now(), "[$-en-US]yyyy-mm-dd_hhmmss"),
                    ".jpg"
                ),
                btnAddMedia.FileName
            ),
        fileExtension: varFileExt,
        picJSON: 
            If(
                Or(
                    Lower(varFileExt) = "jpg",
                    Lower(varFileExt) = "jpeg"
                ),
                    Mid(JSON(imgAddedMedia.Image, IncludeBinaryData), 25, Len(JSON(imgAddedMedia.Image, IncludeBinaryData)) - 25),
                
                Lower(varFileExt) = "png",
                    Mid(JSON(imgAddedMedia.Image, IncludeBinaryData), 24, Len(JSON(imgAddedMedia.Image, IncludeBinaryData)) - 24)
            ),
        picCaption: txtCaption.Text
    }
);

Reset(txtCaption);
Reset(btnAddMedia)

这里有很多(有价值的)东西要解压:

  • 使用 varFileExt 是因为 .jpg 在其 Base64 标头中有 4 个字符(“jpeg”,而 .png 只有 3 个“png”)
    • 因此 Mid(25)Mid(24) 用于 Base64 解析
  • 如果用户在移动设备上并使用该应用拍照,PowerApps 将自动命名图像image.jpg
    • 因此使用If() 声明文件命名

这是我在用户上传完图片后使用OnSelect 的最终Submit 按钮的一些代码:

Set(varUploadPhotos, JSON(colPhotoForFlow, IncludeBinaryData));
PA_PICS_TO_ENDPOINT.Run(varUploadPhotos)

您也可以将其调整为其他文件类型。

【讨论】:

  • 非常感谢,这真的很有帮助...我可以将这张图片详细信息传递到同一个 JSON 中吗?
  • 我应该在这里使用什么控件?我没有连接到 Sharepoint 库,而是尝试直接连接到 Salesforce。大部分博客都展示了如何使用附件控件连接Sharepont库,我默认看不到附件控件
  • 回复: Can I pass along with this image details...:是的。我的答案中显示的参考集合有picCaptionprojectGUID 之类的东西;每张图片对应的元数据。
  • RE: What is the control I should be using here...:我经常使用Add Picture 控件(Insert/Media/Add Picture)。这将引入一个由按钮和预览图像组成的分组控件。在上面的代码中,btnAddMedia.Filename 指的是按钮,imgAddedMedia.Image 指的是预览图像。
  • 你能帮我理解这里的 txtCaptionvarGUID 是什么
猜你喜欢
  • 2018-03-15
  • 2020-09-05
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 2020-01-15
相关资源
最近更新 更多