Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Сіз үлкен шешімді импорттау немесе экспорттау кезінде операция уақыты бітіп қалатын жағдайға тап болғансыз ба? Егер иә болса, шешімді импорттау/экспорттауды асинхронды түрде орындауға үміткер бола аласыз. Бұл тақырыпта .NET және Web API интерфейстеріне арналған Dataverse SDK арқылы асинхронды импорт пен экспортты бастау жолы туралы ақпарат беріледі.
Шешімді кезеңге бөлу
Шешім импортталатын және ортаға бірден қол жетімді болатын шешімді импорттаумен салыстырғанда, кезеңдеу импорттау процесін басқарылатын фазаларға бөледі. Кезеңдік процесс шешімді "ұстау" шешімі ретінде импорттайды, онда әкімші кезеңдік шешімді қашан пайдаланушыларға қолжетімді етуді немесе мақсатты ортада жаңартуды (шешімді жаңарту жағдайында) орындауды шеше алады. Кезеңге бөлу процесінің бөлігі кезеңдік шешімді тексеру болып табылады. Осылайша шешімді кезеңге бөлуге, шешімнің жарамды екенін білуге және сол шешімді қолдану немесе мақсатты ортаға жаңартуды жоспарлауға болады.
| Операция | Веб API | .NET арналған Dataverse SDK |
|---|---|---|
| Шешімді кезеңге бөлу | StageSolution | StageSolutionRequest |
Шешімді кезеңге келтіру нәтижесі сәтті жағдайды немесе сәтсіздікті және (сәтті болса) StageSolutionUploadId қоңырауында пайдаланылатын ImportSolutionAsync көрсететін тексеру нәтижелерінің жинағы болады. Мұның қалай орындалатынының мысалын жоғарыдағы импорттау шешімі Web API үлгі кодын қараңыз.
public static StageSolutionResults StageSolution(
IOrganizationService service,
string solutionFilePath)
{
// Stage the solution
var req = new StageSolutionRequest();
byte[] fileBytes = File.ReadAllBytes(solutionFilePath);
req["CustomizationFile"] = fileBytes;
var res = service.Execute(req);
return (res["StageSolutionResults"] as StageSolutionResults);
}
Шешімді импорттау
ImportSolution синхронды импорттау әрекетін орындайтын әрекет (немесе хабарлама). Импорттау операциясын асинхронды түрде орындау үшін ImportSolutionAsync пайдаланыңыз.
| Операция | Веб API | .NET арналған Dataverse SDK |
|---|---|---|
| Шешімді импорттау | ImportSolutionAsync | ImportSolutionAsyncRequest |
Енді ImportSolutionAsync көрсететін кейбір мысал кодын қарастырайық.
public static ImportSolutionAsyncResponse ImportSolution(
IOrganizationService service,
StageSolutionResults stagingResults,
Dictionary<string,Guid> connectionIds,
Dictionary<string,string> envarValues )
{
// Import the staged solution
var componentDetails = stagingResults.SolutionComponentsDetails;
// TODO These are not referenced in the code but are useful to explore
var missingDependencies = stagingResults.MissingDependencies; // Contains missing dependencies
var solutionDetails = stagingResults.SolutionDetails; // Contains solution details
var connectionReferences = componentDetails.Where(x => string.Equals(x.ComponentTypeName, "connectionreference"));
var envVarDef = componentDetails.Where(x => string.Equals(x.ComponentTypeName, "environmentvariabledefinition"));
var envVarValue = componentDetails.Where(x => string.Equals(x.ComponentTypeName, "environmentvariablevalue"));
var componentParams = new EntityCollection();
// Add each connection reference to the component parmameters entity collection.
foreach (var conn in connectionReferences)
{
var e = new Entity("connectionreference")
{
["connectionreferencelogicalname"] = conn.Attributes["connectionreferencelogicalname"].ToString(),
["connectionreferencedisplayname"] = conn.Attributes["connectionreferencedisplayname"].ToString(),
["connectorid"] = conn.Attributes["connectorid"].ToString(),
["connectionid"] = connectionIds[conn.ComponentName]
};
componentParams.Entities.Add(e);
}
// Add each environment variable to the component parmameters entity collection.
foreach (var value in envVarValue)
{
var e = new Entity("environmentvariablevalue")
{
["schemaname"] = value.Attributes["schemaname"].ToString(),
["value"] = envarValues[value.ComponentName]
};
if (value.Attributes.ContainsKey("environmentvariablevalueid"))
{
e["environmentvariablevalueid"] = value.Attributes["environmentvariablevalueid"].ToString();
}
componentParams.Entities.Add(e);
}
// Import the solution
var importSolutionReq = new ImportSolutionAsyncRequest();
importSolutionReq.ComponentParameters = componentParams;
importSolutionReq.SolutionParameters = new SolutionParameters { StageSolutionUploadId = stagingResults.StageSolutionUploadId };
var response = service.Execute(importSolutionReq) as ImportSolutionAsyncResponse;
return (response);
}
ImportSolutionAsync көптеген енгізу параметрлерін бөліседі ImportSolution бірақ қосады ComponentParameters және SolutionParameters.
ComponentParameters шешімнің теңшеу XML файлындағы құрамдас деректердің үстінен жазу үшін пайдаланылуы мүмкін.
SolutionParameters өту үшін пайдалануға болады StageSolutionUploadId Web API код мысалында көрсетілген кезеңдік шешімнің. Қосымша ақпарат: Шешімді кезеңге бөлу
ImportSolutionAsync қайтарылған жауапта ImportJobKey және AsyncOperationId бар.
ImportJobKey мәні импорттау нәтижесін алу үшін және AsyncOperationId мән импорттау тапсырмасының күйін бақылау үшін пайдаланылуы мүмкін.
public static void CheckImportStatus(
IOrganizationService service,
Guid asyncOperationId,
Guid importJobKey)
{
// Get solution import status
var finished = false;
Entity asyncOperation = null;
// Wait until the async job is finished
while (!finished)
{
asyncOperation = service.Retrieve("asyncoperation", asyncOperationId, new ColumnSet("statecode", "statuscode"));
OptionSetValue statecode = (OptionSetValue)asyncOperation["statecode"];
if (statecode.Value == 3)
{
finished = true;
}
else
{
Thread.Sleep(10000);
}
}
// Solution import completed successfully
OptionSetValue statuscode = (OptionSetValue)asyncOperation["statuscode"];
if (statuscode.Value == 30)
{
Console.WriteLine("The solution import completed successfully.");
}
else if (asyncOperation["statuscode"].ToString() == "31") // Solution import failed
{
Console.WriteLine("The solution import failed.");
var getLogReq = new RetrieveFormattedImportJobResultsRequest { ImportJobId = importJobKey };
var importJob = service.Execute(getLogReq) as RetrieveFormattedImportJobResultsResponse;
// TODO Do something with the import job results
}
}
Шешімді экспорттау
ExportSolution синхронды экспорттау әрекетін орындайтын әрекет (немесе хабарлама). Экспорттау операциясын асинхронды түрде орындау үшін ExportSolutionAsync пайдаланыңыз.
| Операция | Веб API | .NET арналған Dataverse SDK |
|---|---|---|
| Шешімді экспорттау | ExportSolutionAsync | ExportSolutionAsyncRequest |
| Экспортталған шешім файлын жүктеп алу | DownloadSolutionExportData | DownloadSolutionExportDataRequest |
Енді ExportSolutionAsync көрсететін кейбір мысал кодын қарастырайық.
// Where 'service' is a pre-configured IOrganizationService instance.
var service = (OrganizationServiceProxy)xsc.CreateOrganizationService();
var req = new OrganizationRequest("ExportSolutionAsync");
req.Parameters.Add("SolutionName", "ExportSolutionAsyncTest");
req.Parameters.Add("Managed", false);
var response = service.Execute(req);
Жауапта AsyncOperationId және ExportJobId параметр мәндері бар. Асинхронды тапсырманың сәттілігін ( AsyncOperationId == 3;statecode == 30) тексеру үшін жауапта statuscode пайдаланыңыз. Одан кейін DownloadSolutionExportData параметрінде қайтарылатын экспортталған шешім файлын жүктеп алу үшін экспорттық жауаптағы ExportJobId мәні бар ExportSolutionFile әрекетті (немесе хабарды) пайдаланыңыз.
// Where 'service' is a pre-configured IOrganizationService instance.
var service = (OrganizationServiceProxy)xsc.CreateOrganizationService();
var req = new OrganizationRequest("DownloadSolutionExportData");
req.Parameters.Add("ExportJobId", Guid.Parse("a9089b53-a1c7-ea11-a813-000d3a14420d");
var response = service.Execute(req);