Jump to content
Claris Engage 2025 - March 25-26 Austin Texas ×

This topic is 733 days old. Please don't post here. Open a new topic instead.

Recommended Posts

Posted

PhotoPicker.jpgNext to your container fields in iOS, you can show a button to insert a picture from the photo libraries. If you'd do this with our older ImagePicker functions, you may get a dialog about permissions to access the photos library. 

 

The new PhotoPicker functions allow you to access a dialog to pick photos from your app without such a dialog. The dialog runs as part of a background app included with iOS, which has all the permissions needed. It can show the whole photo library without your application having access to it. The user can select one or more pictures and have those being available to your applications. The images are then downloaded in the background if needed and you can check progress in a script. 

 

Here is a sample script:

 

If [ MBS( "PhotoPicker.Available") ] 
	Set Variable [ $r ; Value: MBS( "PhotoPicker.Clear") ] 
	# set trigger
	Set Variable [ $r ; Value: MBS( "PhotoPicker.SetScript"; Get(FileName); "GotImage") ] 
	# you can define a limit, 0 = no limit
	Set Variable [ $r ; Value: MBS( "PhotoPicker.SetSelectionLimit"; 10) ] 
	# show the picker!
	Set Variable [ $r ; Value: MBS( "PhotoPicker.Present") ] 
End If
 

And the script triggered looks like the one below. Basically when the script is triggered, we look how many bytes have to be loaded and show a progress dialog for this. We wait until all images are downloaded. Then we loop over the images and read each one into a container field. For HEIC images use our our Container.ReadImageFile function since that function converts the picture then to PNG format. The clear function later removes the images from memory when we don't need them any longer. Take a look on this script:

Set Variable [ $r ; Value: MBS("ProgressDialog.SetTopText"; "Loading images") ] 
Set Variable [ $r ; Value: MBS("ProgressDialog.SetProgress"; -1) ] 
Set Variable [ $r ; Value: MBS("ProgressDialog.Show") ] 
Pause/Resume Script [ Duration (seconds): ,5 ] 
Loop
	Set Variable [ $BytesLoaded ; Value: MBS("PhotoPicker.BytesLoaded") ] 
	Set Variable [ $TotalBytes ; Value: MBS("PhotoPicker.TotalBytes") ] 
	Set Variable [ $r ; Value: MBS("ProgressDialog.SetProgress"; $BytesLoaded * 100 / $TotalBytes ) ] 
	# 
	If [ MBS("PhotoPicker.IsLoading") ] 
		Pause/Resume Script [ Duration (seconds): ,1 ] 
	Else
		Exit Loop If [ 1 ] 
	End If
End Loop
Set Variable [ $r ; Value: MBS("ProgressDialog.Hide") ] 
# 
Set Variable [ $ImageCount ; Value: MBS("PhotoPicker.ImageCount") ] 
Set Variable [ $index ; Value: 0 ] 
If [ $index < $ImageCount ] 
	Loop
		# Process each image
		Set Variable [ $FilePath ; Value: MBS("PhotoPicker.File"; $index) ] 
		Set Variable [ $Error ; Value: MBS("PhotoPicker.Error"; $index) ] 
		# 
		If [ Length ( $FilePath ) > 0 ] 
			New Record/Request
			If [ Right ( $FilePath; 5 ) = ".heic" ] 
				# special case for HEIC images -> we convert them to PNG
				Set Variable [ $Image ; Value: MBS( "Container.ReadImageFile"; $FilePath; "PNG"; "image.png") ] 
			Else
				# all other files get imported
				Set Variable [ $Image ; Value: MBS( "Container.ReadFile"; $FilePath) ] 
			End If
			Set Field [ ImagePicker::Picture ; $image ] 
			Commit Records/Requests [ With dialog: Off ] 
		End If
		# 
		# next
		Set Variable [ $index ; Value: $index + 1 ] 
		Exit Loop If [ $index  $ImageCount ] 
	End Loop
End If
Set Variable [ $Image ; Value: MBS( "PhotoPicker.Clear") ] 

Please try the new functions in MBS Plugin 12.5 or newer.

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.