Canvas Power App 使用 Rest 将文件上传到 Salesforce API

Canvas Power App to upload file to Salesforce using Rest API

我是 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 并将其发送到流程。我不确定如何在需要通过 REST 服务发送到 Salesforce 的 Power App 中添加上传文件。大多数示例都是将文件加载到 Sharepoint 库,我只是想知道这是否也可行。

有可能。在某些情况下,您必须发挥创意才能解析出正确的 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 header 中有 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)

您也可以将此修改为其他文件类型。