작업을 C++의 작업으로 그룹화
권한 부여 관리자에서 작업은 애플리케이션 사용자가 완료해야 하는 개략적인 작업입니다. 작업은 애플리케이션의 하위 수준 함수 및 메서드인 작업으로 구성됩니다. 그런 다음 해당 작업을 수행해야 하는 역할에 태스크가 할당됩니다. 작업은 IAzTask 개체로 표시됩니다. 작업 및 작업에 대한 자세한 내용은 작업 및 작업을 참조하세요.
다음 예제에서는 작업을 그룹화하여 작업을 만드는 방법을 보여 줍니다. 이 예제에서는 C 드라이브의 루트 디렉터리에 MyStore.xml 라는 기존 XML 정책 저장소가 있고, 이 저장소에 Expense라는 애플리케이션이 있으며, 이 애플리케이션에 C++에서 작업 정의 항목에 정의된 작업이 포함되어 있다고 가정합니다.
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0502
#endif
#pragma comment(lib, "duser.lib")
#include <windows.h>
#include <stdio.h>
#include <azroles.h>
#include <objbase.h>
void main(void){
IAzAuthorizationStore* pStore = NULL;
IAzApplication* pApp = NULL;
IAzTask* pTask = NULL;
HRESULT hr;
void MyHandleError(char *s);
BSTR storeName = NULL;
BSTR appName = NULL;
BSTR taskName = NULL;
BSTR opName = NULL;
// Initialize COM.
hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize COM.");
// Create the AzAuthorizationStore object.
hr = CoCreateInstance(
/*"b2bcff59-a757-4b0b-a1bc-ea69981da69e"*/
__uuidof(AzAuthorizationStore),
NULL,
CLSCTX_ALL,
/*"edbd9ca9-9b82-4f6a-9e8b-98301e450f14"*/
__uuidof(IAzAuthorizationStore),
(void**)&pStore);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create AzAuthorizationStore object.");
// Create null VARIANT for parameters.
VARIANT myVar;
VariantInit(&myVar);
// Allocate a string for the name of the store.
if(!(storeName = SysAllocString(L"msxml://c:\\MyStore.xml")))
MyHandleError("Could not allocate string.");
// Initialize the store.
hr = pStore->Initialize(AZ_AZSTORE_FLAG_MANAGE_STORE_ONLY,
storeName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not initialize store.");
// Create an application object.
if (!(appName = SysAllocString(L"Expense")))
MyHandleError("Could not allocate application name string.");
hr = pStore->OpenApplication(appName, myVar, &pApp);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not open application.");
// Create a task object.
if (!(taskName = SysAllocString(L"Submit Expense")))
MyHandleError("Could not allocate task name string.");
hr = pApp->CreateTask(taskName, myVar, &pTask);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not create task.");
// Add operations to the task.
if (!(opName = SysAllocString(L"RetrieveForm")))
MyHandleError("Could not allocate operation name string.");
hr = pTask->AddOperation(opName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not add 1st operation to the task.");
SysFreeString(opName);
if (!(opName = SysAllocString(L"EnqueRequest")))
MyHandleError("Could not allocate operation name string.");
hr = pTask->AddOperation(opName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not add 2nd operation to the task.");
SysFreeString(opName);
if (!(opName = SysAllocString(L"UseFormControl")))
MyHandleError("Could not allocate operation name string.");
hr = pTask->AddOperation(opName, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not add 3rd operation to the task.");
SysFreeString(opName);
// Save information to the store.
hr = pTask->Submit(0, myVar);
if (!(SUCCEEDED(hr)))
MyHandleError("Could not save task data to the store.");
// Clean up resources.
pStore->Release();
pApp->Release();
pTask->Release();
SysFreeString(storeName);
SysFreeString(appName);
VariantClear(&myVar);
CoUninitialize();
}
void MyHandleError(char *s)
{
printf("An error occurred in running the program.\n");
printf("%s\n",s);
printf("Error number %x\n.",GetLastError());
printf("Program terminating.\n");
exit(1);
}