SaveData, LoadData 및 ClearData 함수
적용 대상: Canvas 앱
앱 호스트의 스토리지에서 컬렉션을 저장하고 다시 로드합니다.
노트
이제 웹 브라우저에서 앱을 실험 기능으로 재생할 때 이러한 기능을 사용할 수 있습니다. 이 기능은 기본적으로 비활성화되어 있습니다. 활성화하려면 설정>예정된 기능>실험적>웹 플레이어에서 SaveData, LoadData, ClearData가 사용 설정됨으로 이동한 후 스위치를 켭니다. 이 실험적 기능에 대한 피드백을 제출하려면 Power Apps 커뮤니티 포럼으로 이동하세요.
설명
SaveData 함수는 나중에 이름으로 사용할 컬렉션을 저장합니다.
LoadData 함수는 이전에 SaveData를 사용하여 저장한 이름으로 컬렉션을 다시 로드합니다. 이 함수를 사용하여 다른 원본에서 컬렉션을 로드할 수 없습니다.
ClearData 함수는 특정 이름으로 스토리지를 지우거나 이름이 제공되지 않은 경우 앱과 관련된 모든 스토리지를 지웁니다.
노트
- SaveData, LoadData 및 ClearData 간에 공유되는 이름은 파일 이름이 아니라 키입니다. 이름은 각 앱마다 고유하고 이름 충돌의 위험이 없으므로 복잡할 필요가 없습니다. 이름에는
*".?:\<>|/
와 같은 문자가 포함되지 않아야 합니다. - SaveData는 Teams 및 웹 브라우저에서 실행되는 Power Apps에 대해 1MB의 데이터로 제한됩니다. 모바일 플레이어에서 실행되는 Power Apps에 대한 고정된 제한은 없지만 아래에서 논의되는 실질적인 제한이 있습니다.
- 일반 텍스트로 저장되므로 민감한 데이터를 웹에 저장하기 위해 SaveData를 사용하지 마세요.
다음 기능을 사용하여 앱 시작 성능을 향상시킵니다.
- 첫 번째 실행 시 App.OnStart 수식에서 데이터 캐싱
- 다음 실행 시 로컬 캐시 다시 로드
이러한 기능을 사용하여 앱에 간단한 오프라인 기능을 추가할 수도 있습니다.
다음과 같은 경우 브라우저 내에서 이러한 기능을 사용할 수 없습니다.
- Power Apps Studio에서 앱 작성
앱을 테스트하려면 iPhone 또는 Android 장치의 Power Apps Mobile에서 앱을 실행하십시오.
이러한 기능은 메모리 내 컬렉션에서 작동할 때 사용 가능한 앱 메모리 양에 의해 제한됩니다. 사용 가능한 메모리는 다음과 같은 요인에 따라 달라질 수 있습니다.
- 장치 및 운영 체제
- Power Apps 플레이어에서 사용하는 메모리
- 화면과 컨트롤이 있는 앱의 복잡성
대용량 데이터를 저장할 때 앱이 실행될 것으로 예상되는 장치 유형에 대해 예상되는 시나리오로 앱을 테스트합니다. 일반적으로 30MB~70MB의 사용 가능한 메모리가 있어야 합니다.
이러한 함수는 Collect 또는 ClearCollect를 사용하여 암시적으로 정의되는 컬렉션에 따라 다릅니다. 컬렉션을 정의하기 위해 Collect 또는 ClearCollect를 호출하여 컬렉션에 데이터를 로드할 필요는 없습니다. 이전 SaveData를 사용한 후 LoadData를 사용하는 것이 일반적입니다. 컬렉션의 구조를 암시적으로 정의하기 위해서는 수식에 이러한 함수가 있어야 합니다. 자세한 내용은 변수 생성 및 제거를 참조하십시오.
로드된 데이터가 컬렉션에 추가됩니다. 빈 컬렉션으로 시작하려면 LoadData를 호출하기 전에 Clear 함수를 사용하십시오.
데이터 보안
SaveData에 저장된 데이터의 격리 및 암호화를 신중하게 고려하고 특히 여러 사용자가 장치를 공유하는 경우 필요에 적합한지 결정하세요.
SaveData로 저장된 데이터는 Power Apps 플레이어에 의해 다른 Power Apps와 격리됩니다. 데이터는 앱의 앱 ID를 기반으로 저장되어 Power Apps 간에 SaveData 네임스페이스를 자동으로 격리합니다.
운영 체제와 브라우저는 Power Apps와 디바이스 및 웹 사이트의 다른 앱 간에 데이터를 격리하는 역할을 합니다. 예를 들어 운영 체제는 Microsoft Outlook에 저장된 데이터를 Power Apps에 저장된 데이터와 분리하고 Bing.com 또는 PowerApps.com과 같은 웹 사이트에서 해당 데이터를 분리하는 역할을 합니다. 운영 체제에 내장된 앱 샌드박스 기능은 일반적으로 사용자가 액세스할 수 없거나 숨겨져 있는 SaveData 스토리지에 사용됩니다.
동일한 앱을 사용하는 경우 운영 체제와 브라우저는 서로 다른 운영 체제 수준의 사용자 간에 데이터를 격리하는 역할도 합니다. 예를 들어 두 명의 다른 사용자가 컴퓨터를 공유하고 두 개의 다른 Windows 로그인 자격 증명을 사용하는 경우 운영 체제는 두 Windows 사용자 간의 데이터를 격리해야 합니다.
운영 체제 사용자가 동일한 경우 서로 다른 Power Apps 사용자 간에 데이터가 격리되거나 격리되지 않을 수 있습니다. 모든 Power Apps 플레이어가 이것을 같은 방식으로 취급하는 것은 아닙니다. 예를 들어 Power Apps 플레이어에서 같은 Windows 사용자로 로그인되어 있는 동안 사용자는 Power Apps 로그아웃하고 다른 Power Apps 사용자로 로그인합니다. 사용자가 Power Apps 변경되기 전에 앱에 저장된 데이터는 동일한 앱 내에서 Power Apps 두 번째 사용자가 액세스할 수 있습니다. 데이터도 제거될 수 있으며 첫 Power Apps 사용자는 더 이상 데이터에 액세스하지 못할 수 있습니다. 동작은 Power Apps 플레이어마다 다릅니다.
운영 체제에서 데이터를 암호화할 수도 있고, Microsoft Intune과 같은 모바일 기기 관리 도구를 사용할 수도 있습니다. 웹 브라우저에서 앱을 재생할 때 저장된 데이터는 암호화되지 않습니다.
구문
데이터 저장( 컬렉션, 이름 )
LoadData( 컬렉션, 이름 [, 존재하지 않는 파일 무시 ])
- 컬렉션 - 필수. 저장하거나 로드할 컬렉션입니다.
- 이름 - 필수. 스토리지 이름입니다. 동일한 데이터 집합을 저장하고 로드하려면 이름이 동일해야 합니다. 네임스페이스는 다른 앱과 공유되지 않습니다. 이름에는
*".?:\<>|/
와 같은 문자가 포함되지 않아야 합니다. - IgnoreNonexistentFile - 선택 사항. 파일이 없는 경우 수행할 작업을 나타내는 부울 값입니다. false(기본값)를 사용하여 오류를 반환하고 true를 사용하여 오류를 숨깁니다.
ClearData( [이름] )
- 이름 - 선택사항. 이전에 SaveData로 저장한 스토리지의 이름입니다. 이름이 제공되지 않으면 앱과 관련된 모든 스토리지가 지워집니다.
예제
수식 | 설명 | 결과 |
---|---|---|
SaveData(LocalCache, "MyCache") | LoadData가 나중에 검색하기에 적합한 "MyCache"라는 이름으로 사용자 장치에 LocalCache 컬렉션을 저장합니다. | 데이터는 "MyCache"라는 이름으로 앱 호스트에 저장됩니다. |
LoadData(로컬캐시, "내캐시") | 이전에 SaveData에 호출되어 저장된 "MyCache"라는 이름의 사용자 장치에서 LocalCache 컬렉션을 로드합니다. | 데이터는 "MyCache"라는 이름으로 앱 호스트에서 로드됩니다. |
ClearData( "내 캐시" ) | "MyCache"라는 이름으로 스토리지를 지웁니다. 이 이름으로 저장된 모든 데이터는 더 이상 LoadData를 통해 사용할 수 없습니다. | 데이터는 "MyCache"라는 이름으로 앱 호스트에서 제거됩니다. |
데이터 지우기() | 이 앱과 관련된 모든 스토리지를 지웁니다. 다른 앱에서 저장한 데이터는 영향을 받지 않습니다. | 모든 데이터가 앱 호스트에서 제거됩니다. |
간단한 오프라인 예
다음 간단한 예는 오프라인 상태에서 일상 항목의 이름과 사진을 캡처하고 저장합니다. 나중에 사용하기 위해 장치의 로컬 저장소에 정보를 저장합니다. 이를 통해 앱을 닫거나 데이터 손실 없이 장치를 다시 시작할 수 있습니다.
노트
이 예시에서는 카메라 컨트롤을 사용하여 이미지를 캡처합니다. Teams 또는 웹 브라우저에서 실행할 때 SaveData는 1MB의 데이터로 제한되므로 이 예시는 몇 개의 이미지 이상에서는 작동하지 않습니다. 또한 카메라에 따라 이미지가 하나여도 작동하지 않을 수 있습니다. 디바이스를 사용하여 이 전체 예시를 진행하거나 이 예시의 카메라 컨트롤 및 사진 부분을 제거하여 Teams 또는 웹 브라우저에서 실행하세요.
태블릿 레이아웃으로 빈 캔버스 앱을 만듭니다. 자세한 내용은 템플릿에서 앱 만들기를 읽어 보고 Blank app에서 Tablet layout을 선택하십시오.
Text input 컨트롤과 Camera 컨트롤을 추가하고 그림과 같이 대략적으로 정렬합니다.
Button 컨트롤을 추가합니다.
단추 컨트롤을 두 번 클릭하여 단추 텍스트를 Add Item으로 변경하거나 Text 속성으로 수정합니다.
컬렉션에 항목을 추가하는 단추 컨트롤의 OnSelect 속성을 다음 수식으로 설정합니다.
Collect( MyItems, { Item: TextInput1.Text, Picture: Camera1.Photo } )
또 다른 Button 컨트롤을 추가합니다.
단추 컨트롤을 두 번 클릭하여 단추 텍스트를 Save Data로 변경하거나 Text 속성을 수정합니다.
컬렉션을 로컬 장치에 저장하려면 단추 컨트롤의 OnSelect 속성을 다음 수식으로 설정하십시오.
SaveData( MyItems, "LocalSavedItems" )
아무 영향도 미치지 않으므로 단추를 테스트하고 싶습니다. 그러나 웹 브라우저에서 작성할 때만 오류가 표시됩니다. 다음 단계를 수행하여 이 수식을 테스트하기 전에 먼저 앱을 저장하고 장치에서 엽니다.
세 번째 Button 컨트롤을 추가합니다.
단추 컨트롤을 두 번 클릭하여 단추 텍스트를 Load Data로 변경하거나 Text 속성을 수정합니다.
로컬 장치에서 컬렉션을 로드하려면 단추 컨트롤의 OnSelect 속성을 다음 수식으로 설정하십시오.
LoadData( MyItems, "LocalSavedItems" )
그림 및 텍스트 영역이 포함된 Vertical 레이아웃으로 Gallery 컨트롤을 추가합니다.
메시지가 표시되면 MyItems 컬렉션을 이 갤러리의 데이터 원본으로 선택합니다. 이를 통해 Gallery 컨트롤의 Items 속성이 설정됩니다.
갤러리 템플릿의 이미지 컨트롤은 기본적으로 Image 속성을 ThisItem.Picture 로 설정해야 하고, 레이블 컨트롤은 기본적으로 Text 속성을 ThisItem.Item으로 설정해야 합니다. 다음 단계에서 항목을 추가한 후 갤러리에 아무것도 표시되지 않으면 이 수식을 확인하십시오.
컨트롤을 다른 컨트롤의 오른쪽에 배치합니다.
앱을 저장합니다. 처음 저장한 경우 게시할 필요가 없습니다. 처음이 아니라면 저장 후 앱을 게시합니다.
휴대 전화나 태블릿과 같은 장치에서 앱을 엽니다. SaveData 및 LoadData 는 Studio나 웹 브라우저에서 사용할 수 없습니다. 앱이 즉시 표시되지 않을 경우 앱 목록을 새로 고치면 앱이 장치에 표시되는 데 몇 초가 걸릴 수 있습니다. 계정에서 로그아웃했다가 다시 로그인해도 도움이 될 수 있습니다.
앱을 다운로드한 후에는 네트워크 연결을 끊고 오프라인에서 앱을 실행할 수 있습니다.
이름을 입력하고 항목 사진을 찍습니다.
Add Item 단추를 선택합니다. 컬렉션을 로드하려면 항목 추가를 여러 번 반복하십시오.
Save Data 단추를 선택합니다. 컬렉션의 데이터가 로컬 장치에 저장됩니다.
앱을 닫습니다. 모든 항목 이름과 사진을 포함하여 메모리에 있는 컬렉션은 손실되지만 장치의 저장소에는 그대로 있습니다.
앱을 다시 시작합니다. 메모리의 컬렉션이 다시 갤러리에서 비어 있는 것으로 표시됩니다.
Load Data 단추를 선택합니다. 컬렉션은 장치에 저장된 데이터로 다시 채워지고 항목은 갤러리로 돌아갑니다. 이 단추로 LoadData 함수를 호출하기 전에 컬렉션은 비어 있었습니다. 저장소에서 데이터를 로드하기 전에 Collect 또는 ClearCollect를 호출할 필요가 없었습니다.
다시 Load Data 단추를 선택합니다. 저장된 데이터가 컬렉션 끝에 추가되고 갤러리에 스크롤 막대가 나타납니다. 추가하지 않고 교체하려면 LoadData 함수를 호출하기 전에 먼저 Clear 함수를 사용하여 컬렉션을 지우십시오.
추가 고급 오프라인 예
자세한 예는 간단한 오프라인 기능에서 다음 문서를 참조하십시오.